iptables / 用于从原始接口 (eth0) 返回传入流量的路由

iptables / 用于从原始接口 (eth0) 返回传入流量的路由

我刚刚开始修补 Linux / IPTABLES 并遵循这个很棒的教程这里成功将 RaspBerry Pi 设备(运行 RaspBerryPi OS / Debian)设置为 VPN 网关。同一网络上的任何设备都可以手动配置其网络设置并将其路由设置为该设备的 IP 地址,然后该设备将通过 VPN 处理信息,然后将其发送回(全部来自同一网络)以太网0界面)。

我遇到的问题是 VPN 软件适用于 Linux 的 NordVPN删除屯0当我断开/注销 VPN 时自动连接接口,导致笔记本电脑上的互联网不再工作。据我了解,这是由于数据包仍被告知转发,并且如果屯0接口不存在这些数据包就无法返回笔记本电脑。

简单地返回所有传入流量的理想程序是什么以太网0回到以太网0什么时候屯0不存在?

结构:

例如:笔记本电脑 → raspBerry pi(eth0 > tun0 > eth0) → 笔记本电脑

RaspBerry Pi 上的 iptables 如下:

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i eth0 -p icmp -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP

到目前为止,我的研究为我提供了几个答案:

https://unix.stackexchange.com/a/322386

始终将流量从其发起的接口转发出去

也许类似于:(ip route add table 2 default via 192.168.0.1我的主路由器的IP地址?)但是我还没有尝试过,并且不完全确定这是否是我应该前进的方向。

答案1

纠正一个常见的错误观念:iptables不路由。它只是控制是否允许路由流继续进行,但不会改变它们的方向(除非使用诸如 NAT 之类的东西,它可以改变路由命运,仍然由路由堆栈完成)。这就是为什么问题中最重要的事情应该是提供路由和路由表(对于这种情况,看起来也应该提供路由规则)。

一旦隧道接口消失,所有使用它的路由也将消失。您将在其单个接口上获得路由器路由:其入口接口也是其出口接口:以太网0

您只需要使用 iptables 启用该流,因为它的默认策略是丢弃转发的数据包:

sudo iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT

这就是您所需要的。通常,您的 RPi 已将其默认路由设置为使用 192.168.0.1 路由器,因此无需执行其他操作。如果路线不标准,则必须将其添加到问题中并更新此答案。

以下是精美印刷品:

  • 当主机节点通过 RPi 发送数据包时,RPi 会检测到这不是最佳路由,并会发回一些数据包ICMP 重定向数据包警告客户端有更直接的路由可用:直接通过 192.168.0.1。节点可以选择缓存信息并将其下一个数据包直接发送到该路由器,或者可以继续使用 RPi,无论如何,RPi 也会继续转发这些数据包。实际的路由器肯定会直接将回复发送回主机节点,从而创建非对称路由。由于这一切都发生在同一个 LAN 中,因此具有相同的接口,这应该没问题,不会触发类似的事情严格反向路径转发任何地方。

  • 因此,在这种情况下,您不应使用额外的 conntrack 规则(现有的规则就可以)。-m conntrack --ctstate NEW,ESTABLISHED并不等同于所有数据包,因为从连线将会出现由绕过 RPi 的数据包引起的超出窗口的 TCP 数据包,这些数据包将被标记为 INVALID(但必须允许转发)。

答案2

我讨厌这样的答案,但我来了。您似乎使用的是更“经典”的、基于 openVPN 的 NordVPN 连接。您知道wireguard隧道格式是可能的吗?

您的连接是隧道,而不是 ethertap,因此您的连接可能是一个不错的选择。

好处:

  • 我认为如果您的隧道关闭,隧道设备(此处为 wg0)不会掉落
  • “执行此操作或使用此操作”类型的路由(和 DNS)决策可作为 wireguard 设置的一部分进行简单配置。

我不想成为“那个人”,所以我很抱歉我可能看起来如此。我觉得,如果您刚刚开始使用 NordVPN 作为新连接,那么这是一个绝佳的机会,可以确保您已经看到了其他选项,并且仍然决定 openVPN 设置是最佳选择。刚开始使用 WG 而不是 VTun(詹姆斯离开的父项目,因为他不想在 openVPN 中实现他实现的东西),我发现它的配置至少与 OpenVPN 一样容易,如果不是更容易的话,而且似乎给我一个快速可靠的隧道组。

话虽如此,我确实为多宿主代理机器人设置了“从它们进入的同一接口发送返回数据包”的配置,这对 Linux 来说是一个挑战,因为与默认情况下执行此操作的 Windows 不同,Linux 内核本身通常不记得数据包是如何进来的——我们必须用一些 iproute 技巧来欺骗它。我会看看是否能找到大约 10 年前(CentOS6 早期)最初设置该盒子时的笔记。

相关内容