利用樹莓派將 WIFI 網絡轉發到路由器WAN口
1 目的
樹莓派的無線網卡和有線網卡作路由,無線網卡與外網(如電信路由器出口)相連,有線網卡與內網相連。
內網通過一個路由器分發。
實現內外網隔離。
2 概況
外網網絡(局域網):192.168.0.0/24
樹莓派NAT路由:192.168.2.0/24(有線網卡) --> 192.168.0.112(樹莓派的無線網絡IP)
樹莓派無線網卡IP:192.168.0.112
樹莓派有線網卡IP:192.168.2.1
內網網絡:192.168.2.0/24
內網測試電腦IP:192.168.2.2
路由器外網地址:192.168.2.2 (和電腦測試一樣)
路由器NAT網絡:192.168.3.0/24 (隨意)
3 環境
1.樹莓派4。
2.樹莓派能夠連接WIFI,WIFI連接互聯網。
3.一根網線和一個路由器。
4 主要節點
1.樹莓派和電腦互聯,以樹莓派作為主機,實現局域網互通。
2.配置NAT,使發送到eth0的包能夠被轉發到wlan0上去,從而實現網絡共享。
3.測試的時候用PING,PING通了之后如果不能正常上網則檢查dns設置等問題。
4.1 局域網互通
1.將樹莓派連接至WIFI,保證可以上網。
2.樹莓派與電腦直連(先不與路由器WAN口連接,方便測試)。電腦有線網卡設置IP為192.168.2.2/24,網關為192.168.2.1。樹莓派有線網卡IP設置為192.168.2.1/24。
3.樹莓派的路由表調整。移除eth0的默認路由表,添加對192.168.2.0/24網絡的eth0轉發規則。如:
route delete default dev eth0
route add -net 192.168.2.0/24 dev eth0
4.此時,局域網配置完成,PING檢查是否互通。
4.2 啟用內核包轉發
其實是很重要的一步,因為內核默認是關閉這個功能的。
相關方式可以在網上查,這里提供一條。
echo "1" > /proc/sys/net/ipv4/ip_forward
4.3 轉發規則
1.在樹莓派端配置,命令如下
sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wlan0 -j SNAT --to 192.168.0.112
即,將192.168.2.0/24網絡上的源數據包轉發到wlan0對應192.168.1.112源IP上(描述不准確,就是一條NAT類型的轉發規則)。
2.此時,PING 192.168.0.0/24網絡的IP地址應通過。配置好主機的DNS服務后,外網網絡地址也相應能夠解析訪問。
4.4 連接路由器
1.與連接電腦類似,將樹莓派與路由器WAN口連接。路由器上網方式(也即WAN口的網絡配置)設置為靜態IP,與電腦上設置一致即可。路由器網絡設置為192.168.3.0/24即可正常工作(不沖突即可)。
5 性能
實測CPU占用只能跑到25%(單核占用),不知道是不是方法問題。下行/上行速度最高約 25~30 Mbps。經過測試發現,速率與無線網絡信號強度有關。
附1 /etc/rc.local
以下腳本直接放在啟動腳本或者手動執行均可。如果路由器、樹莓派總共三塊網卡的IP均配置正確的話,電腦連接到路由器的WI-FI,就能PING通外網了。
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wlan0 -j SNAT --to 192.168.0.112
route delete default dev eth0
route add -net 192.168.2.0/24 dev eth0
ifconfig eth0 192.168.2.1/24
附2 另一個 /etc/rc.local
找了另一個方案,不依賴於具體的外網地址
echo "1" > /proc/sys/net/ipv4/ip_forward
#iptables -A FORWARD -i wlan0 -j ACCEPT
#iptables -A FORWARD -o wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
route delete default dev eth0
route add -net 192.168.2.0/24 dev eth0
ifconfig eth0 192.168.2.1/24