我在 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。AssumeUDPEncapsulationContextOnSendRule
HKLM\System\CurrentControlSet\Services\IPSec
现在我需要找到一个适用于 Windows 7 的解决方案,因为我迟早要解决这个问题,这是不可避免的。
更新
为了让遇到同样问题的人受益,Windows 7 的修复方法是创建一个DWORD
名为 的新值AssumeUDPEncapsulationContextOnSendRule
。HKLM\SYSTEM\CurrentControlSet\services\PolicyAgent
同样,对于双 NAT,它需要值为 2。
答案2
这里有一个指南,可以确保客户端端口在 Windows 机器上是打开的。
https://www.magnumvpn.com/setup-windows-10-firewall-l2tp.html