了解路由设备中的 iptables

了解路由设备中的 iptables

因此,我一直在 stunnel、OpenVPN 和许多在线文章(主要是来自蔡杰登) 并且可以成功创建一个,但是我不完全理解 iptables 部分(如下所述),尽管我已经阅读了一些关于该主题的在线帮助。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

有人能给我解释一下每一行吗?我知道这可能很简单,但老实说,我不明白为什么这样做有效 =P

提前致谢 =)

答案1

首先,我们需要定义 IP 转发。我不会解释得非常深入(我也不知道),但基本上,在这种情况下,你需要知道的是它意味着数据包从一台主机通过这台主机流向另一台主机。

我必须指出,-A FORWARD ... -j ACCEPT除非您有-P FORWARD DROP类似的东西(即丢弃任何应该转发的数据包),否则任何规则/命令都不是必需的。规则不会使转发发生,而只会在默认设置不是“接受”时产生例外。(您可以使用 sysctl“启用”转发。)

现在我们可以看看规则:

iptables -A FORWARD -i wlan0 -j ACCEPT

这意味着允许来自 wlan0 的数据包被转发(通过该主机上的任何接口到其他网络)。

iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

这意味着允许来自 wlan1 的数据包转发到 tun0。(请注意,数据包不需要到达 tun0 本身的地址,因为这不算作“转发”。)

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED

这意味着仅当存在相关或已建立的连接时,才允许来自 tun0 的数据包转发到 wlan1,并使用扩展/模块进行检查state(它已被 淘汰conntrack,取而代之的是交换机--ctstate)。与前一条规则一起,它们本质上意味着允许在 tun0 和 wlan1 之间转发,只要连接不是由来自 tun0 的数据包发起的。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

这基本上意味着从 tun0 发出的数据包的源地址将更改为 tun0 的源地址。如果不这样做,下一个路由器将需要有返回路由,以便任何响应到达原始源地址。(即,要到达原始源地址,此主机应该是网关)。这也称为 NAT(过载)/ PAT。可以将其视为使 tun0 像典型的消费级路由器的 WAN 端口/接口一样工作。

答案2

要理解这一点,您必须了解路由的原理。不过,我无法在这个答案中写出一本书,所以我会简短而简单地回答。

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

这条规则基本上是综合考虑,适用NAT,但在决定如何路由此包之后。这就是它应用于的原因POSTROUTING。然后它将包发送回名为的隧道tun0。这是您的 VPN 连接。它还应用伪装,因为规则不知道设备的 IP。如果没有它,您需要对每个连接的设备使用此命令。所以你可以把它看作某种通配符。

iptables -A FORWARD -i wlan0 -j ACCEPT 
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

这行表示接受转发到wlan0接口的所有流量。我假设wlan0在本指南中用作主要互联网连接,因此这是路由器和 VPN 隧道之间的主要路由。这使 Pi 接受此接口上的包并提供访问内部网络。这里的第二行基本上只是包裹的返回路径。从 pi 回到隧道。

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT

此行允许来自隧道的流量tun0进入接口wlan0,但前提是已建立连接已确立的之前。

简而言之,这些规则允许来自 VPN 隧道的数据包流入专用网络的其余部分并返回。

相关内容