![OpenVPN 不是所有流量的默认网关](https://linux22.com/image/647005/OpenVPN%20%E4%B8%8D%E6%98%AF%E6%89%80%E6%9C%89%E6%B5%81%E9%87%8F%E7%9A%84%E9%BB%98%E8%AE%A4%E7%BD%91%E5%85%B3.png)
我正在尝试让我的客户端通过运行 OpenVPN 的 VPS 转发所有流量。如您所见,它将允许对域和原始 IP 地址执行 ping 操作,但不允许通过 curl 进行的流量,并且 traceroute 不会产生任何结果。未连接到 VPN 时,流量正常工作。
所有信息都在这里:https://pastebin.com/tGspNefn
谢谢。
得益于以下解决方案,配置可以正常工作:
服务器:
port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
客户:
client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
答案1
解决方案分为两部分:
1. 将所有流量重定向到隧道
最简单的解决方案 - 使用 OpenVPN 的--redirect-gateway autolocal
选项(或将其放入配置文件中作为redirect-gateway autolocal
.
2. 处理 OpenVPN 服务器上的流量
现在隧道已启动,所有流量都会进入隧道并从接口弹出到服务器端tun0
。
您需要配置两件事才能使其工作:
a. 启用数据包转发
默认情况下,大多数发行版都禁用数据包转发,因此来自隧道接口的数据包永远不会到达公共接口。您必须使用以下命令启用转发:
~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
测试完成后,更改将永久生效/etc/sysctl.conf
还要确保iptables
没有阻止转发的流量:
~ # iptables -I FORWARD -j ACCEPT
这对于测试来说已经足够了——在生产中,您需要使防火墙规则更具体一些,但这超出了这里的范围。
b. 对隧道传出的数据包进行 NAT
启用转发后,数据包默认以不变的源地址转发,这就是您的情况10.8.0.6
- 这些数据包要么在 ISP 网关上被丢弃,要么即使到达目的地,回复也永远找不到回程。这些私有地址在互联网上不可路由。
解决方案是对出口流量进行 NAT,即10.8.0.6
用 VPN 服务器的公共 IP 替换私有地址。这将确保回复到达 VPN 服务器,然后它们将被转发回隧道。
~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
3. 测试
现在尝试ping 8.8.4.4
从您的 VPN 客户端。您应该会看到回复。如果没有,请告诉我们 :)