我已经在VPS上安装了OpenVPN和PPTP。 我有几个问题,我似乎无法得到一个坚定的答案。
我想在1.1.1.1(eth0,公共IP地址)和1.1.1.2(eth0:1,公共IP地址)上的PPTP上安装OpenVPN。 我能用SNAT做到这一点。 然而,从我一直在阅读的所有教程中,build议将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的所有stream量并停止在那。
我的问题是,
1)这些前瞻性规则是否会相互冲突? 2)我需要转发ppp + eth0:1来避免冲突吗? 这甚至有可能吗? 我还没有想出办法。 3)iptables是否足够聪明,可以通过这些规则来路由特定于tun和ppp的stream量?
首先让我们尝试清理一下情况,因为您似乎混淆了数据包过滤和路由协同工作的某些事情。
iptables (实际上,Netfilter – 这是内核堆栈的名称; iptables只是运行Netfilter规则集的用户空间二进制文件的名称)不会路由任何内容; 路由由路由堆栈完成(使用ip用户空间二进制进行控制),Netfilter只能通过PREROUTING链中安装的规则(可以执行DNAT)影响路由。
所有通过主机的数据包都会遍历(“filter”表的)“FORWARD”(即“filter”表),也就是说,不是从它发起的(那些是通过“OUTPUT”链),而不是指向它正在经历“INPUT”链)。
因此,如果主机上启用了数据包转发(因此主机作为路由器工作),则“FORWARD”链的策略及其中的任何规则确实会影响某些数据包的stream向 ,而不会影响路由决策。
每个主要的三条链 – INPUT , OUTPUT和FORWARD都有所谓的“默认策略”,它可以是ALLOW (默认)或DROP 。 后者只是丢弃任何进入链中的数据包。 如果数据包未被链中安装的规则处理,则默认策略适用于数据包。
通常情况下,典型的“边界网关”(一个连接局域网和互联网的主机)具有这样的设置,以便默认阻止一切事物 – 包括通过Netfilter转发数据包,即使它启用了IP堆栈本身也是如此然后插入特定规则以明确地启用特定types的通信量。 也就是说,这些教程通常build议将INPUT和FORWARD的默认策略设置为DROP ,然后使用规则显式启用某些types的通信。
如果一个特定的主机/networking可以通过多个networking访问,那么哪个networking接口用于发送数据包是由路由select堆栈决定的(Netfilter在这个过程中没有发言权)基于路由表和接口指标路线。
如果您在路由器主机上运行ip route ,您将看到一组看起来像这样的规则
10.8.10.0/24 via 10.8.0.2 dev tun0
“via”地址指定下一个路由器,“dev”列出接口发送数据包到达该路由器。
现在让我们回到你的情况。
如果其政策是DROP ,您只需要在FORWARD链中放置特定的规则,否则它将“正常工作”。
如果你默认在你的FORWARD链中丢包,那么你需要明确地允许在VPN接口和面向Internet的接口之间,即在ppp+ 和back之间以及在tun+和back之间传递数据包。 如果您需要不同VPNnetworking的客户端能够相互交谈,您还需要启用相应接口(双向)之间的数据包转发。
请注意,在为FORWARD链(或任何其他实际的)编写规则时,不必指向接口,只需使用networking地址(用于iptables的-s和-d命令行选项)即可。
因此,如果您的VPN提供两个专用networkingA和B,则可以插入一对规则
iptables -A FORWARD -s A -d B -j ACCEPT iptables -A FORWARD -s B -d A -j ACCEPT
另外,由于VPN通常提供专用networking,就像局域网一样,我倾向于插入类似的东西
iptables -A FORWARD -s 192.168/24 -d 10/8 -j ACCEPT iptables -A FORWARD -s 10/8 -d 192.168/24 -j ACCEPT
expression了“每个人都可以和我私人networking上的其他人交谈”的想法(如果你也想覆盖less用的172.16/12私有范围,显然需要3x3=9规则)。
更新:请注意,您不必在VPN接口和连接到Internet的接口之间启用数据包转发:前者是虚拟的,只能在VPN提供的隧道内的私有networking中传输数据包; 提供这些隧道的数据包在主机上运行的VPN进程之间stream动,并且不会穿越FORWARD链。 因此,如果您只需要VPN客户端与您的LAN或者他们之间进行通信,则只需启用VPN(和LAN,如果存在)接口之间的数据包转发。