iptables规则允许防火墙后面的L2TP / IPSEC VPN

我在Smoothwall Express论坛上询问了这个问题,但他们不愿提供太多的帮助。 毕竟,他们真的想出售商业版本。

我需要提供一个L2TP / IPSEC VPN来远程支持我们即将推出的一些新机器(没有select那个部分)。 由于远程用户还需要通过Active Directory进行身份validation,因此我需要在Windows(2003)服务器上运行VPN,而不是直接在防火墙上运行。

由于Smoothwall Express没有提供从其正常pipe理界面转发协议的规定,因此需要通过编辑rc.firewall.upiptables设置来完成。 这是我的问题。 我不知道iptables,并觉得即使我花时间来阅读它,我搞砸的风险是显着的。

以下部分目前存在于rc.firewall.up

 # IPSEC /sbin/iptables -N secin /sbin/iptables -A secin -i ipsec0 -j ACCEPT /sbin/iptables -A INPUT -j secin /sbin/iptables -N secout /sbin/iptables -A secout -i ipsec0 -j ACCEPT /sbin/iptables -A FORWARD -j secout 

[这里有些无关的东西]

 # IPSEC /sbin/iptables -N ipsec /sbin/iptables -A ipsec -p udp --destination-port 500 -j ACCEPT /sbin/iptables -A ipsec -p udp --destination-port 4500 -j ACCEPT /sbin/iptables -A ipsec -p 50 -j ACCEPT /sbin/iptables -A ipsec -p 51 -j ACCEPT /sbin/iptables -A block -i ppp0 -j ipsec /sbin/iptables -A block -i ippp0 -j ipsec if [ "$RED_DEV" != "" ]; then /sbin/iptables -A block -i $RED_DEV -j ipsec fi 

除非我误以为第二个博克会导致我想转发的stream量被吞噬。 我试着评论第二块,并添加这个,这是从PPTP传递所需的线(它工作)和我已经能够从各种来源获得:

 # L2TP/IPSEC /sbin/iptables -N l2tp /sbin/iptables -A l2tp -p udp --destination-port 500 --dst 192.169.0.7 -j ACCEPT /sbin/iptables -A l2tp -p udp --destination-port 1701 --dst 192.169.0.7 -j ACCEPT /sbin/iptables -A l2tp -p udp --destination-port 4500 --dst 192.169.0.7 -j ACCEPT /sbin/iptables -A l2tp -p 50 --dst 192.169.0.7 -j ACCEPT /sbin/iptables -A l2tp -p 51 --dst 192.169.0.7 -j ACCEPT /sbin/iptables -I FORWARD -j l2tp /sbin/iptables -t nat -N l2tp /sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 500 -j DNAT --to 192.169.0.7:500 /sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 1701 -j DNAT --to 192.169.0.7:1701 /sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 4500 -j DNAT --to 192.169.0.7:4500 /sbin/iptables -t nat -A l2tp -i $RED_DEV -p 50 -j DNAT --to 192.169.0.7 /sbin/iptables -t nat -A l2tp -i $RED_DEV -p 51 -j DNAT --to 192.169.0.7 /sbin/iptables -t nat -A PREROUTING -j l2tp 

..但是这不起作用。 我在哪里填满?

顺便说一句, $RED_DEV转换为面向公众的界面,显然192.168.0.7是我的VPN服务器。

更新:

事实certificate,上述设置工作 – 有点。 我正在家里testing,我有一台MacBook和几台Windows XP机器。 我可以从Mac连接,但无法使用任何Windows机器连接。 不幸的是,需要该VPN进行远程支持的机械公司只使用Windows XP。 🙁

正如在问题的更新中指出的,即使使用双重NAT,VPN也可以从Mac到Windows,而不是从Windows到Windows。 看来这只是一个提出正确的search术语来寻找解决scheme的问题。

根据这篇知识库文章 ,在Windows XP客户机上,我们需要在HKLM\System\CurrentControlSet\Services\IPSec创build一个名为AssumeUDPEncapsulationContextOnSendRule的新DWORD值。 对于双重NAT,它需要值为2。

现在我需要为Windows 7find一个解决scheme,因为迟早我不得不处理这个问题。

更新

为了同样问题的任何人的利益,Windows 7的修复程序是在HKLM\SYSTEM\CurrentControlSet\services\PolicyAgent创build一个名为AssumeUDPEncapsulationContextOnSendRule的新的DWORD值。 同样,对于双重NAT,它需要2的值。

这里有一个指导,以确保客户端端口是在Windows机器本身打开。

https://www.magnumvpn.com/setup-windows-10-firewall-l2tp.html