利用树莓派将 WIFI 网络转发到路由器WAN口 - amazzzzzing

时间:2024-04-15 07:35:37

利用树莓派将 WIFI 网络转发到路由器WAN口

利用树莓派将 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