如何在第二个 WiFi 适配器上共享对网络的“互联网热点”访问?

如何在第二个 WiFi 适配器上共享对网络的“互联网热点”访问?

谁能帮忙解答一下linux路由问题?本质上,我想使用 Ubuntu 笔记本电脑来提供对附加网络的互联网访问。

我有一个 Raspberry pi,有 wifi 网络 (192.168.42.0/24)。它的IP地址是192.168.42.20。

互联网接入由手机热点提供。 (192.168.43.0/24)。互联网网关是 192.168.43.1

我有一台 Linux 笔记本电脑(Ubuntu),带有两个 wifi 卡 - 上述网络各一个。 (192.168.42.21 和 192.168.43.10)

我还在以太网卡上连接了另一个网络,该网络成功与客户端共享互联网连接。该网络是 10.42.0.0/24。在本例中,笔记本电脑是 DHCP 服务器,其 IP 为 10.42.0.1

我正在尝试使用笔记本电脑为 Pi 提供互联网访问路由,我已向笔记本电脑添加了以下 iptable 规则。它们源自 10.42.0./24 网络的转发规则,正如我所说,该网络可以连接到互联网。

-A FORWARD -d 192.168.42.0/24 -o wlx801f0281f02a -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.42.0/24 -i wlx801f0281f02a -j ACCEPT
-A FORWARD -i wlx801f0281f02a -o wlx801f0281f02a -j ACCEPT
ip_forwarding is enabled

我在 Pi 上添加了一条路线。路由表现在显示为:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.42.21   0.0.0.0         UG    0      0        0 wlan0
192.168.42.0    0.0.0.0         255.255.255.0   U     303    0        0 wlan0

Pi 可以 ping 通其他网络,并且其他两个网络也可以 ping 通 Pi。

但是......尽管 10.42.0.117 上的设备可以愉快地连接到外部世界,但 Pi 仍然无法访问互联网。

10.42.0.117 上的路由表与 Pi 的路由表完全“平行”:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    0      0        0 eth0
10.42.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo

我缺少什么?

答案1

所以答案(在 @YoMismo 让我走上正轨之后)是再添加一条 iptables 规则:

sudo iptables --table nat -A POSTROUTING -s 192.168.42.0/24 ! -d 192.168.42.0/24 -j MASQUERADE

结果可以看到

sudo iptables -t nat -L -n -v

所以总结一下:在需要访问的设备上添加路由如下:

sudo ip route add 0.0.0.0/0 via 192.168.42.21 dev wlan0 

192.168.42.21是“linux路由器”上“桥接”wifi适配器的IP地址

然后将iptables规则添加到“linux路由器”中,如下所示:

sudo iptables -A FORWARD -d 192.168.42.0/24 -o wlx801f0281f02a -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.42.0/24 -i wlx801f0281f02a -j ACCEPT
sudo iptables -A FORWARD -i wlx801f0281f02a -o wlx801f0281f02a -j ACCEPT
sudo iptables --table nat -A POSTROUTING -s 192.168.42.0/24 ! -d 192.168.42.0/24 -j MASQUERADE

同样,wlx801f0281f02a 是我用来连接到网络 192.168.42.0/24 的桥接 wifi 适配器接口。

因此,源设备上的互联网请求将使用源设备上的路由路由到“linux 路由器”上的 192.168.42.21,并在其中进行 NAT 并转发到网关。

请注意,ip_forward 已启用。

如果需求是临时/临时的,则使规则持久化或将它们放入 bash 脚本中。

相关内容