如何将 eth0 转发到 wlan0?

如何将 eth0 转发到 wlan0?

iptables我尝试使用以下命令通过 NAT 将 eth0 转发到 Raspberry Pi B+ 上的 wlan0 :

echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD --in-interface eth0 -j ACCEPT iptables --table nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE

但它不起作用,当我尝试使用ping google.com连接ping: unknown host google.com到 Raspberry Pi B+ 上的 eth0 端口的笔记本电脑时。在我的 Raspberry Pi B+ 上,我只能从 wlan0 正常访问互联网。我的 wifi 网络上的 IP 地址如下:192.168.1.xxx。

如何将 eth0 转发到 wlan0?

答案1

至少显示的命令看起来是正确的。如果这不是您在 Raspberry Pi 上使用的完整防火墙配置,即如果您有其他规则或更改了默认转发策略(默认情况下为 ACCEPT,使用 iptables -P 进行更改),您可能还需要通过添加状态匹配来启用回复流量:

iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这将使连接跟踪器能够检测回复数据包是否属于源自内部接口的同一连接并接受它们。

我记不太清楚,如果 Raspberry Pi 内核没有启用 conntrack 匹配,那么你必须使用(旧的、已弃用的)状态扩展:

iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

您只需输入其中之一。我更喜欢将其添加为链中的第一条规则。

Raspberry Pi 上的 eth0 接口及其后面的计算机应具有来自另一个网络的地址。例如,您可以在 RasPi 上使用 192.168.10.1/24(或相同的 /255.255.255.0),在目标主机上使用 192.168.10.2。

在目标主机上,您将 RasPi 的 eth0 地址(上例中的 192.168.10.1)设置为默认网关,并将 DNS 服务器设置为与 RasPi 上设置的相同。您可以通过在其上发出以下指令来检查 RasPi 使用的服务器:cat /etc/resolv.conf,然后查看“nameserver”条目。或者您可以设置 google 公共 DNS(8.8.8.8、8.8.4.4)。

答案2

iptables 允许您过滤流量,并像您所做的那样设置 NAT 转换,但它实际上与将您的设备设置为路由器以在两个接口之间转发流量没有任何关系。唯一真正与此相关的命令是 ip_forward 命令。其余的都取决于您在 Pi 和笔记本电脑上的 IP 设置。 

(澄清一下,你的第二行确实告诉 iptables 允许流量从 eth0 进入并转发到 Pi 本身以外的任何地方,但它实际上不允许流量以其他方式流动,因此它本身毫无用处,并且只有在你将 iptables 设置为默认丢弃所有转发流量时才有意义)

因此,如果 Pi 本身可以访问互联网,那么您真正需要解决的问题是:

  • 您的网络 eth0 端的 IP 设置是什么,一切是否都已排列好,以便您的笔记本电脑可以正常与 Pi 通信,并且您的笔记本电脑是否使用 Pi 的 eth0 地址作为网关?

  • 如果您已将 iptables 更改为默认拒绝所有 FORWARD 流量,并且只有上述规则有效,则上述规则可确保数据包可以出去但没有回复可以返回,那么您实际上希望 iptables 过滤什么?

相关内容