在 iptables 中将所有网络流量从 wlan0 转发到 eth0

在 iptables 中将所有网络流量从 wlan0 转发到 eth0

关于如何做到这一点,有很多指南,而且它们都略有不同,我都很难理解和解读它们……

我有一台 Raspberry Pi,它使用 dnsmasq 和 iptables 将 eth0 “桥接”到 wlan0。wlan0 接口是连接到主网络并具有 Internet 访问权限的接口。它通过网络上的 DHCP 获取动态 IP(10.0.1.xxx)。eth0 接口设置为静态 IP 地址(192.168.220.1)。dnsmasq 实例在 eth0 上进行侦听,并为连接到那里的任何设备提供 IP 地址(它始终分配相同的 IP 地址(192.168.1.2)。内核中启用了 IP 转发。我的 iptables 规则如下所示:

-A POSTROUTING -o wlan0 -j MASQUERADE
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT

一切正常。eth0 端口上的客户端设备从 Pi 的 dnsmasq 服务器获取 IP 地址,然后客户端设备通过 Pi 的 wlan0 端口访问互联网。

现在我的问题是,连接到 eth0 的“桥接”客户端设备的端口 80 上运行着一个 Web 服务器,我需要从网络上的任何其他设备访问它。理想情况下,我只想将浏览器指向 Pi 的 wlan0 IP 地址,并让它充当“桥接”客户端的 Web 服务器。我需要添加哪些 iptable 规则来实现这一点?

答案1

只需使用以下命令将目标网络地址转换规则添加到 PREROUTING 链中:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -i wlan0 -j DNAT --to-destination 192.168.2.1:80

这意味着,对于对 Rpi 的 wlan0 接口/IP(-i wlan0)的目标端口(--dport 80)发出的请求,执行目标网络地址转换(DNAT)以转发 eth0 设备的端口 80。这会转换双向的 IP 流量,因此对 10.0.1.xxx:80 的请求将与 192.168.2.1:80 提供的网页相匹配,并按预期工作。

相关内容