iptables 伪装无法正常工作

iptables 伪装无法正常工作

我正在尝试使用 Raspberry Pi 来类似于网桥,通过使用iptableswith MASQUERADE。尽管我知道有很多技术原因这不是一座桥,但我所需要做的就是将网络流量从硬连线端口获取eth0到 Pi 连接到的无线网络wlan0。然而,它似乎不起作用;尽管 Pi 上可以访问互联网,但我希望通过 Pi 连接到网络的计算机上的 DNS 失败。

按照说明进行操作这里,我使用了以下命令:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

wlan0我希望它在启用后立即工作并运行 ,因此我将其添加到/etc/network/interfaces一个post-up子句中。我注意到 Pi 无法从网络上的 DHCP 正确获取网关,因此我在同一条语句中手动设置了该网关。以下是完整内容/etc/network/interfaces

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
        post-up route add default gw 10.110.0.11; echo "1" > /proc/sys/net/ipv4/ip_forward ; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

/etc/dhcpcd.conf使用以下命令将 Pi 配置为具有静态 IP :

interface eth0
static ip_address=192.168.0.5/24
static routers=192.168.0.5
static domanin_name_servers=8.8.8.8 8.8.4.4

然后,在我希望接收连接的计算机上,我将其配置为在同一子网中拥有自己的 IP(我选择192.168.0.2),具有相同的子网掩码 ( 255.255.255.0),并将网关设置为192.168.0.5。虽然我可以从计算机上看到 Pi(我可以 ping 并ssh连接到它),但它似乎没有通过它接收互联网连接;我无法访问任何网站,DNS 查找失败。我该如何解决这个问题?

感谢您的帮助!

答案1

正如您自己所说,使用 NAT(通过 iptables 伪装)不会将 RaspPi 变成网桥。由于技术原因(WLAN 网络上的 3 地址模式),无论在何种硬件上,您都无法桥接 WLAN 和 LAN。

NAT 的作用是假装来自 RaspPi 后面 LAN 的流量确实源自 RaspPi 本身,因此 WLAN 只能看到每个主机(RaspPi)。无线局域网有什么作用不是所做的是以某种方式将第 2 层广播从 WLAN 转发到 LAN。但这是 DHCP 所需要的。

再多的摆弄iptables也不会为你做到这一点。

所以最简单的选择是在RaspPi上运行DHCP服务器。这就是我所做的,而且效果确实很好。

如果由于某种原因你要使用通过 WLAN 上的 DHCP 服务器提供的 DHCP 信息,因为它为您的计算机提供了超级特殊的自定义信息,而这些信息只能以这种方式发现(不太可能),因此变得更加棘手。限制仍然是整个程序集必须在 WLAN 上显示为单个主机,但您可以使用WLAN_卡贝尔假装该主机是单身的RaspPi LAN 上的设备。它的工作原理是绕过 Linux 网络堆栈(和 iptables)并直接重写第 2 层帧,在 LAN 和 WLAN 之间转发它们。它还将使您的 RaspPi 在 WLAN 上无法访问。

如果这还不够,而且你要拥有多个设备,唯一的方法是在 WLAN 上启用 4 地址模式。这需要得到支持全部WLAN 设备本身就有令人头疼的问题,所以这确实是最后的手段。

相关内容