Iptable 转发配置

Iptable 转发配置

我在 VPS 上安装了 OpenVPN 和 PPTP。我有几个问题似乎无法得到确切的答案。

我想在 1.1.1.1(eth0,公网 IP 地址)上安装 OpenVPN,在 1.1.1.2(eth0:1,公网 IP 地址)上安装 PPTP。我能够使用 SNAT 实现这一点。但是,从我读过的所有教程来看,它建议将 ppp+ 转发到 eth0,反之亦然,tun 接口的情况也一样。

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT

我的设置是 CentOS,专用服务器。

出于某种原因,我假设 iptables 会将所有流量从 eth0 路由到 tun0 并在那里停止。

我的问题是,

1) 这些转发规则会相互冲突吗?2) 我是否需要将 ppp+ 转发到 eth0:1 以避免冲突?这可能吗?我还没有找到办法。3) iptables 是否足够智能,可以通过这些规则路由特定于 tun 和 ppp 的流量?

答案1

首先,让我们尝试理清一下情况,因为您似乎对数据包过滤和路由如何协同工作感到困惑。

  • iptables(实际上,Netfilter — 这是内核堆栈的名称;iptables只是用于操作 Netfilter 规则集的用户空间二进制文件的名称)不路由任何内容;路由由路由堆栈(使用用户ip空间二进制文件控制)完成,并且 Netfilter 只能通过安装在链中的规则影响路由PREROUTING(可以执行 DNAT 的位置)。

  • 所有进入的数据包都会经过“FORWARD”链(“过滤”表)通过主机,也就是说,不是源自该主机(那些通过“OUTPUT”链)并且不是目的地为该主机(那些通过“INPUT”链)。

    因此,是的,如果主机上启用了数据包转发(因此主机作为路由器工作),则链“FORWARD”的策略及其中的任何规则都会影响流动某些数据包,但不是路由决策。

  • 主要的三条链 —INPUTOUTPUT都有FORWARD所谓的“默认策略”,可能是ALLOW(默认)或DROP。后者会丢弃进入链的任何数据包。如果数据包未由链中安装的规则处理,则将应用默认策略。

  • 典型的“边界网关”(将 LAN 连接到 Internet 的主机)通常具有这样的设置,以便默认情况下阻止所有内容(包括通过 Netfilter 转发数据包,即使它已为 IP 堆栈本身启用),然后插入特定规则以明确启用特定类型的流量。也就是说,这些教程通常建议设置默认策略,然后INPUT使用规则明确启用某些类型的流量。FORWARDDROP

  • 如果特定主机/网络可通过多条路由到达,则路由堆栈(Netfilter 再次对此过程无权发言)会根据路由表和接口指标来决定使用哪个网络接口发送数据包。

    如果你ip route在路由器主机上运行,​​你会看到一组类似这样的规则

    10.8.10.0/24 via 10.8.0.2 dev tun0
    

    其中“via”地址指定下一个路由器,“dev”列出发送数据包到达该路由器的接口。

现在让我们回顾一下你的情况。

  • FORWARD如果链的策略是,则您只需要在链中放置特定规则DROP,否则它将“正常工作”。

  • 如果你默认DROP在你的FORWARD链中设置数据包,那么你需要明确允许在 VPN 接口和面向 Internet 的接口之间传递数据包,即ppp+ 然后回来以及往返tun+。如果您需要不同 VPN 网络的客户端能够相互通信,您还需要启用相应接口之间的数据包转发(双向)。

  • 请注意,你不需要必须在为链(或任何其他链)编写规则时参考接口FORWARD——您可以只使用网络地址(对于-s和的-d命令行选项iptables)。

    因此,如果你的 VPN 提供了两个私有网络 A 和 B,你可以插入一对规则,例如

    iptables -A FORWARD -s A -d B -j ACCEPT
    iptables -A FORWARD -s B -d A -j ACCEPT
    

    此外,由于 VPN 通常提供专用网络,LAN 也是如此,因此我倾向于插入类似

    iptables -A FORWARD -s 192.168/24 -d 10/8 -j ACCEPT
    iptables -A FORWARD -s 10/8 -d 192.168/24 -j ACCEPT
    

    表达“每个人都可以在我的私人网络上与其他人交谈”的想法(如果您还想覆盖较少使用的172.16/12私人范围,显然需要制定3x3=9规则)。

更新:请注意,您不一定需要在 VPN 接口和连接到 Internet 的接口之间启用数据包转发:前者是虚拟的,仅在私有网络中传输数据包里面VPN 提供的隧道;数据包提供这些隧道流向/流出主机上运行的 VPN 进程,不遍历链FORWARD。因此,如果您只需要 VPN 客户端与您的 LAN 通信或它们之间通信,则只需启用 VPN(和 LAN,如果存在)接口之间的数据包转发。

相关内容