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

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

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

我需要提供 L2TP/IPSEC VPN 来远程支持我们即将获得的一些新机器(这部分别无选择)。由于远程用户也需要根据 Active Directory 进行身份验证,因此我需要在我们的 Windows (2003) 服务器上运行 VPN,而不是直接在防火墙上运行。

由于 Smoothwall Express 没有提供从其正常管理界面转发协议的功能,因此需要通过编辑 中的 iptables 设置来完成此操作rc.firewall.up。这就是我的问题所在。我不了解 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

除非我弄错了,否则第二个块会导致我想要转发的流量被吞没。我尝试注释掉第二个块并添加这个块,它改编自 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 服务器。

更新:

事实证明,上述设置确实有效 - 有点。我在家里测试了这一点,我有一台 MacBook 和几台 Windows XP 机器。我可以从 Mac 顺利连接,但无法使用任何 Windows 机器连接。不幸的是,需要此 VPN 进行远程支持的机械公司只使用 Windows XP。:(

答案1

正如问题更新中所述,即使使用双重 NAT,VPN 也可以从 Mac 到 Windows 运行,但不能从 Windows 到 Windows 运行。看来,找到解决方案只需要想出正确的搜索词。

按照此知识库文章,我们需要在 Windows XP 客户端计算机上创建一个名为 的新值DWORD。对于双 NAT,它需要值为 2。AssumeUDPEncapsulationContextOnSendRuleHKLM\System\CurrentControlSet\Services\IPSec

现在我需要找到一个适用于 Windows 7 的解决方案,因为我迟早要解决这个问题,这是不可避免的。

更新

为了让遇到同样问题的人受益,Windows 7 的修复方法是创建一个DWORD名为 的新值AssumeUDPEncapsulationContextOnSendRuleHKLM\SYSTEM\CurrentControlSet\services\PolicyAgent同样,对于双 NAT,它需要值为 2。

答案2

这里有一个指南,可以确保客户端端口在 Windows 机器上是打开的。

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

相关内容