iptables 转发不起作用

iptables 转发不起作用

我正在尝试将 ASUS TinkerBoard(RaspberryPi 衍生产品)设置为无线桥接器。我有两个接口,wlan0和wlx000e3,对应两个wi-fi适配器。接口 wlx000e3 连接到提供 Internet 访问的路由器。接口 wlan0 用​​作个人接入点。

我已经安装并配置了 hostapd 和 isc-dhcp-server,并尝试按照互联网上的各种指南指南设置 iptables(从https://wiki.archlinux.org/index.php/Internet_sharing#Configuration,然后在不起作用时尝试一些不同的变体。)我能够从客户端 PC 连接到开发板,并从开发板连接到互联网。但我无法让董事会实际转发任何内容。

IPv4 转发已启用:/proc/sys/net/ipv4/ip_forward 为 1。iptables 设置成功,没有任何错误:

# iptables -L -v -n -t nat
...
Chain POSTROUTING (policy ACCEPT 15 packets, 986 bytes)
 pkts bytes target prot opt in out source
 14 945 MASQUERADE all -- * wlx000e3 0.0.0.0/0 0.0.0.0/0

# iptables -L -v -n
Chain Input (policy ACCEPT 1547 packets, 114K bytes)
 pkts bytes target prot opt in out source

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source
 0 0 ACCEPT all -- wlan0 wlx000e3 0.0.0.0/0 0.0.0.0/0
 0 0 ACCEPT all -- wlx000e3 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED, ESTABLISHED

Chain OUTPUT (policy ACCEPT 1074 packets, 195K bytes)
 pkts bytes target prot opt in out source

但它仍然不起作用。日志或 dmesg 中没有错误,甚至没有警告。我发现没有数据包到达转发链,这是我的大部分规则所在。

有任何想法吗?

可能相关的一件事是,它是一个相对较旧的内核(4.4.103+),并且几乎不包含任何模块(我真的很想避免手动构建它,除非必须这样做)。不过,它应该内置 NAT 支持的基本功能(如果根本不存在 NAT 支持,我预计会出现一些错误)。但我无法启用数据包跟踪,因为我没有内核模块 nf_log_ipv4。

PS我什么要做的就是将 LOG 目标添加到 iptables。因此,我已经验证来自我尝试转发的客户端的数据包确实显示在“nat”表的 PREROUTING 链中。但不知何故,它们没有进入 FORWARD 链。这向我表明,也许我的路由有问题,但我没有发现任何问题:

#ip route
default via 192.168.1.254 dev wlx000e3 src 192.168.1.78 metric 302
169.254.238.0/24 dev wlan0 proto kernel scope link src 169.254.238.1
192.168.1.0/24 dev wlx000e3 proto kernel scope link src 192.168.1.78 metric 302

这里,客户端是169.254.238.4,板子的wlan0接口是169.254.238.1,上游路由器是192.168.1.254。

答案1

我已经弄清楚了。

在启用“火星日志记录”并使用 tcpdump 一段时间后,我发现离开客户端 PC 的所有数据包的源 IP 地址字段都设置为 0.0.0.0。

进一步的谷歌搜索让我发现https://superuser.com/questions/1069956/all-outgoing-tcp-packets-have-source-ip-address-0-0-0-0

然后我在 /etc/dhcp/dhcpd.conf 中将子网更改为 172.16.0.0/24,在 /etc/network/interfaces 中将下游静态 IP 更改为 172.16.0.1,一切都开始正常工作。

相关内容