我正在尝试配置一个在 Ubuntu 上运行的新 OpenVPN 服务器(发行版对我来说无关紧要),但在 stunnel 内部建立隧道(以避免 DPI)。我的问题是,如果我将客户端配置为通过 VPN 路由所有内容,那么我得到的流量为零。没有 stunnel 的相同配置工作正常。我怀疑存在某种本地主机路由问题,但我就是无法确定。
我的 OpenVPN 服务器配置:
[...]
topology subnet
port 1196
proto tcp
mode server
[...]
dev tun0
server 192.168.81.0 255.255.255.0
push "redirect-gateway def1 bybass-dhcp"
push "route 192.168.10.0 255.255.255.0"
push "dhcp-option DNS 192.168.10.254"
我在同一个 OpenVPN 服务器上的 stunnel 配置:
# Connection
[openvpn-localhost]
# Incoming connection port
accept = 8443
# Connection to local OpenVPN server
connect = 127.0.0.1:1196
我的主网络是 192.168.10.0/24,VPN 子网是 192.168.81.0/24。同样在 OpenVPN 服务器上,我有以下 iptables 规则来转发所有内容:
Chain POSTROUTING (policy ACCEPT)
[...]
MASQUERADE all -- 192.168.81.0/24 anywhere
内核中也启用了 IP 转发。
在我的 OpenVPN 客户端上,我连接到本地端口,然后将 OpenVPN 流量通过隧道传输到服务器。客户端上的 stunnel 配置:
[openvpn-localhost]
client = yes
# Local openvpn connection
accept = 127.0.0.1:1196
# Remote tunnel
connect = <my remote target>:8443
一旦一切连接好,这就是我的客户端上的路由表:
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.81.1 0.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.43.1 0.0.0.0 UG 0 0 0 wlp2s0
127.0.0.1 192.168.43.1 255.255.255.255 UGH 0 0 0 wlp2s0
192.168.10.0 192.168.81.1 255.255.255.0 UG 0 0 0 tun0
192.168.43.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp2s0
192.168.43.1 0.0.0.0 255.255.255.255 UH 0 0 0 wlp2s0
192.168.81.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
在这种情况下,192.168.43.0/24 是我为了测试而连接的网络。它根本没有连接到我的内部网络。
我的客户端无法在 VPN 上 ping 任何内容。如能提供任何帮助或意见以解决此问题,我将不胜感激。
答案1
您需要做的是将以下路由推送行添加到 openvpn 配置文件中(在服务器端):
push "route [ENDPOINT_IP] 255.255.255.255 net_gateway"
或者
您可以在客户端上手动添加该路由(每次您想要使用它时 - 或者您可以将其添加到您的网络脚本中),方法是输入:
sudo route add -host (or -net) [DESTINATION-SERVER-IP aka ENDPOINT_IP] gw [YOUR-LAN-GW-IP] (e.g. 192.168.10.1) netmask 0.0.0.0 dev [Interface] (e.g. wlp2s0)
如果这不起作用;您可能还需要检查 /etc/sysctl.conf 文件中是否启用了 ip-v4.forwarding。
祝你好运