使用 iptables 共享 Internet 连接

网络工程 IPv4 纳特 ip 鼻涕虫
2022-02-08 06:40:03

客观的:

我正在使用以下网络配置的嵌入式 Linux 设备。

  • 接口 1:“wlan0”充当接入点。
  • 接口 2:“eth1”连接到 Internet。

我的目标是从连接到“eth1”的无线客户端对到达“wlan0”的数据包进行 NAT(并且发往除 wlan0 子网中的 IP 以外的 IP)。这样连接到“wlan0”的无线客户端就可以访问 Internet。

尝试的解决方案:

我浏览了几个链接(不幸的是我错过了参考资料),这些链接使用iptables.

EXTIF="eth1"
INTIF="wlan0"

        echo "1" > /proc/sys/net/ipv4/ip_forward
        echo "1" > /proc/sys/net/ipv4/ip_dynaddr

        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -F INPUT
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -F OUTPUT
        $IPTABLES -P FORWARD DROP
        $IPTABLES -F FORWARD
        $IPTABLES -t nat -F

        route add -net 192.168.10.0/24 dev $INTIF

        $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
        #$IPTABLES -A FORWARD -j LOG
    #Puzzled, how will the matching condition of `-o $EXTIF` be satisfied for any packets???

        echo "   Enabling SNAT (MASQUERADE) functionality on $EXTIF"
        $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

I am bit new to `iptables` so have the  following clarifications

需要说明:

  1. FORWARD据我了解,只有当它不适合本地主机时,数据包才会遍历链。
  2. 我的澄清是如何-o $EXTIF满足任何数据包的匹配条件。我知道这-i $INTIF将是满意的,因为它是数据包的入口接口。
2个回答

据我了解,只有当它不打算用于本地主机时,数据包才会遍历 FORWARD 链。

正确的。

我要澄清的是,任何数据包都将如何满足 -o $EXTIF 的匹配条件。我知道 -i $INTIF 将被满足,因为它是数据包的入口接口。

当数据包到达“转发”链时,已经做出了路由决定(包括关于是在本地接受数据包还是继续发送数据包的决定)。所以输出接口是已知的,可以在规则中匹配。

-o $EXTIF 将得到满足,因为它是除 LAN 之外的所有设备的出口接口。换句话说,互联网。因此,当您的 LAN 尝试访问 Internet 上的某个站点时,它将遍历 $INTIF 并退出 $EXTIF。