openvpn 客户端阻止 http 服务器向 WAN 提供网页

openvpn 客户端阻止 http 服务器向 WAN 提供网页

起初我以为这是 IPTABLES 配置错误,但事实并非如此。请注意,这不是 LAN Web 请求的问题,仅是 WAN 的问题。

我暂时停用了所有 iptables 链,只记录所有入站和出站。iptables 记录了传入请求,但没有响应传出。我尝试了我想要的端口 80,但也尝试了一些更高的端口。

一旦我关闭 openvpn 客户端,监听端口 80(nginx)的 Web 服务器就能够向我的 LAN 外部的所有 IP 提供网页。

我在机器上找不到任何能给出明确答案的日志。nginx 日志表明(或者缺乏)没有通信到达它。

我留下的印象是 openvpn 阻止所有 WAN IP 访问任何给定端口。有没有办法阻止这种行为?至少在端口 80 上?

openvpn运行前的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

openvpn运行时的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.10.57     0.0.0.0         UG    0      0        0 tun0
10.10.10.1      10.10.10.57     255.255.255.255 UGH   0      0        0 tun0
10.10.10.57     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
63.142.161.7    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

更新 2:在 openvpn 客户端配置文件中添加 route-nopull 后,我能够提供网页,但 vpn 已变得无用。差不多了,但我对路由了解不够,无法修复此问题。

答案1

您的 OpenVPN 配置允许从远程系统获取默认网关。

我假装在进行 NAT 的网络点(在 ADSL 调制解调器上或 ISP 服务器上的某个地方),您已将公共地址映射到您的内部服务器。

但有一个问题。想象一下:

互联网上某个拥有公网 IP 地址 AAAA 的人想要查看你服务器上的页面,这些页面希望位于公网地址 BBBB 上,NAT 点将地址 BBBB 重写为你服务器的真实地址(但不是公网地址),比如 192.168.0.2,但源地址仍然相同 - AAAA 你的服务器处理该请求,并将发送答复 - 但答复将从地址 192.168.0.2 发送到地址 AAAA - 通过你的默认网关!

如果这种情况在没有 OpenVPN 的情况下继续,数据包将通过默认网关 192.168.0.1,并在某处被重写为源地址 BBBB,而不是 192.168.0.2。一切顺利。

但是,如果您的方案继续使用 OpenVPN,您的服务器必须通过默认网关向 AAAA 发送数据包 - 但这不是 192.168.0.1,而是 10.10.10.57。在这种情况下,我无法说,这个数据包会做什么。它会被重写到其他源地址,比如 CCCC 吗?还是会被丢弃?

为什么您要在对方站点上设置默认网关?您只需要适合对方站点地址的路由,例如 10.10.10.0/24(可能还有其他,这只是示例)...

在 OpenVPN 服务器的配置中你必须删除如下行:

push "redirect-gateway def1 bypass-dhcp"

相关内容