VPN 网关工作站无法访问

VPN 网关工作站无法访问

我想使用我的 Linux 工作站作为本地网络的 VPN 网关。同一工作站被用作 Web 服务器。当我将工作站连接到 VPN 时,无法再从外部网络访问此 Web 服务器。

我的设置如下:

ISP 路由器 - ip 192.168.0.1(默认网关,启用端口映射以使用非标准公共端口)

Linux 工作站 - 固定 IP 192.168.0.20(dhcp 服务器,因为我的路由器不允许更改网关地址、openvpn、apache、dns 服务器)

“ip route show” 的输出

0.0.0.0/1 via 10.8.3.1 dev tun0 
default via 192.168.0.1 dev eth0 src 192.168.0.20 metric 202 
10.8.3.0/24 dev tun0 proto kernel scope link src 10.8.3.12 
37.120.143.221 via 192.168.0.1 dev eth0 (VPN external IP)
128.0.0.0/1 via 10.8.3.1 dev tun0 
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.20 metric 202 

配置如下:

net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

我注意到的一件事是,当在工作站上启用 VPN 时,我的 ISP 路由器不会在已连接客户端列表中列出我的 Linux 工作站的正确本地 IP 地址。有时它是正确的,但有时它看起来只是一个随机 IP。

如果我添加以下路由:EXTERNAL_IP via 192.168.0.1 dev eth0(其中 EXTERNAL_IP 是 WAN ip),那么我可以访问本地网络上的 Web 服务器,但仍然不能从其他网络访问。

答案1

您的设置没有问题,错误在于您的路由。

如果你的服务器正常运行两个都作为网络服务器作为远程服务器的 VPN 客户端,任何尝试访问 Web 服务器的用户都将收到来自远程 VPN 服务器的回复(不是直接从 Web 服务器获取,因为本地服务器的路由表指示它路由一切通过远程 OpenVPN 服务器。任何向站点 A 发送查询但收到来自 B 的回复的机器都会自动丢弃该回复,这是出于明显的安全原因。因此,Web 服务器变得无法访问。

有很多方法可以解决您的问题。我最喜欢的方法是保持 Web 服务器不变,将 OpenVPN 客户端移动到托管在同一台服务器上的 Linux 容器,然后将路由器配置更改为 DHCP/dnsmasq(无论什么)服务器,以通过 Linux 容器路由所有 LAN 通信。这比听起来容易得多。

另一种可能性是设置路由表,将主路由表留给 OpenVPN 客户端,同时将第二个路由表设置为完全相同的VPN 处于连接状态时,不是激活,然后指示您的内核通过第二个路由表路由来自服务器(本身!)的所有流量。其余流量(源自您的 LAN 的流量,以及您希望通过 OpenVPN 路由的流量)将默认使用主路由表。

这也很容易做到,你可以找到这里一篇非常精彩、简短的 Linux 介绍政策(或者来源)路由。

或者,您可以决定将您的 Web 服务器托管在托管 OpenVPN 服务器的同一台机器上,这也可以解决您的问题。在这种情况下,最简单的方法是镜子远程服务器上的本地网站,以便您可以在本地进行任何更改。

选择权完全在你手中。

相关内容