我有一台 VPN 服务器,它将流量隧道传输到 PostgreSQL 数据库服务器,否则无法通过互联网访问。VPN 只能通过 IPv4 访问。
问题
所有客户端均可建立 VPN 连接。部分客户端无法连接到数据库。Atcpdump
表明流量在过程中的某个时刻超时。
这件事情的奇怪之处在于客户——使用同一个笔记本- 可以从工作办公室连接,但不能从家庭办公室连接。
尝试的解决方案
我遵循了不同的教程和说明,了解如何设置强大的 VPN 服务器。
我分析了配置文件,测试了不同的设置,并确保文件中的每一行都有清晰、易懂和具体的用途。
我特别确保匹配iptables
符合官方文档。 这是我的/etc/ufw/before.rules
:
# User modified
*nat
-I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 192.168.169.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 192.168.169.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
-A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
# End user modified
[. . .]
# User modified
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 192.168.169.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 192.168.169.0/24 -j ACCEPT
# End user modified
经过深思熟虑的解决方案
鉴于成功连接取决于客户端的位置(家庭办公室/工作办公室),因此很可能是路由器设置或网络运营商导致了此问题。我能够确定,连接失败仅发生在由沃达丰作为运营商的网络中。
我的研究表明,许多人因为沃达丰而面临类似的问题精简版(共享虚拟 IPv4 地址),并通过升级到双栈(真实的 IPv4 地址)。问题是:即使这能解决问题,也必须由每个客户端单独设置(不可持续),而且看起来沃达丰可能越来越不愿意批准这些请求。因此,最合乎逻辑的做法可能是配置 VPN 服务器,使其支持 IPv6,然后看看这是否能解决问题。
问题
对于我可以尝试的事情,您还有其他建议吗?
答案1
我发现一个线索,表明沃达丰的 DS-lite 技术会导致更多开销并增加数据包大小。根据这一线索,我找到了一个人,他能够通过将 MTU 大小减小到 1270 来解决连接问题iptables
。
我在我的系统中也做了同样的事情/etc/ufw/before.rules
,并且还稍微精简了 mangle 命令。这似乎解决了问题!我现在正在等待其他用户的反馈。
# User modified
*nat
-I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 192.168.169.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 192.168.169.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270
-A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270
COMMIT
# End user modified
[. . .]
# User modified
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 192.168.169.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 192.168.169.0/24 -j ACCEPT
# End user modified