Raspberry Pi 化身 WiFi 蛋

前文

我們已經改造 Raspberry Pi 使用 4G 數據網路

目標

這次我們要讓 Raspberry Pi 將網絡分享給其他裝置,你可以選:

無線路由器

因為博主很懶惰,不想重複造輪子,所以無線路由器的教材就直接引用 Sixfab 的教學

如果你用的是早於 Raspberry Pi 3 的版本,你大概需要一個 USB 無線網路卡。

備份無線網絡配置

這並不是必須的步驟,不過萬一你日後想恢復原樣,這一步會很有幫助。

1
$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.backup.conf

配置無線網絡裝置

用以下指令清除舊配置

1
$ sudo cp /dev/null /etc/wpa_supplicant/wpa_supplicant.conf

將以下的新配置寫入到 /etc/wpa_supplicant/wpa_supplicant.conf

1
2
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

安裝 RaspAP

有一個簡單的安裝精靈 RaspAP 跟著它的步驟去進行安裝

1
$ wget -q https://git.io/voEUQ -O /tmp/raspap && bash /tmp/raspap -y

不過由於我本人並沒有試過這個方法,所以如果有任何疑問(例如默認的密碼、管理員界面等)還請前往 Sixfab 的教學原文教學(包含故障排除章節)

有線路由器

我自己是用的這個方法,因為感覺會比較安心,始終有線的網絡感覺會比較穩定。這一部分就要使用網絡位址轉換技術(Network Address Translation,NAT)來連接 ppp0eth0 兩個網絡界面(網卡)

我是參考將無線網絡分享到網線教程然後將它改成將 PPP 網絡分享到網線

DHCP 和 DNS 伺服器

你可以選自己喜歡的諸如 isc-dhcp-server 之類比較複雜的,這邊直接用 dnsmasq 比較方便

1
$ sudo apt-get install dnsmasq

設置數據包轉發

編輯 /etc/sysctl.conf 裡的 #net.ipv4.ip_forwarding=1

1
$ sudo nano /etc/sysctl.conf

移除#,將這行文字變成net.ipv4.ip_forwarding=1。這樣下次開機的時候就會啟用數據包轉發。

設置網絡界面

編輯 /etc/network/interfaces 裡的 eth0 部分

1
2
3
4
5
6
allow-hotplug eth0  
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255

設置 dnsmasq

先備份一下 dnsmasq 原本的設置

1
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

然後編輯 /etc/dnsmasq.conf

1
2
3
4
5
6
7
8
9
10
11
interface=eth0      # 分享到 eth0  
listen-address=192.168.2.1 # 和/etc/network/interfaces配置的 IP 要一致
# Bind to the interface to make sure we aren't sending things elsewhere
#### bind-interfaces #### BUT don't enable this.
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
# Never forward addresses in the non-routed address spaces.
bogus-priv
# Assign IP addresses between 192.168.2.2 and 192.168.2.100 with a
# 12 hour lease time
dhcp-range=192.168.2.2,192.168.2.100,12h

關於 bind-interfaces 部分,原本的教學是啟用的,不過我這邊啟用的話會無法分享網絡,所以這邊用#註釋掉了

設置 NAT

通過防火牆來設置 NAT

1
2
3
$ sudo iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE  
$ sudo iptables -A FORWARD -i wwan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o wwan0 -j ACCEPT

設置為永久 NAT

保存設置

1
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

修改 /etc/rc.local 開機自動載入 NAT 設置

1
2
# Add this line above exit 0
iptables-restore < /etc/iptables.ipv4.nat

完成

將手提電腦連上 Raspberry Pi 然後……可以了

1
2
3
4
5
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=99.2 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=22.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=51 time=69.7 ms