我试图让我的客户端通过运行OpenVPN的VPS转发所有流量。正如您所看到的,它将允许pings同时访问域和原始IP地址,但它不允许通过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 3client
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发布于 2014-12-02 22:05:17
解决方案分为两部分:
最简单的解决方案--使用OpenVPN的--redirect-gateway autolocal选项(或者将其作为redirect-gateway autolocal放在配置文件中)。
上的通信量
现在隧道已经开通,所有的流量都进入隧道,并从tun0接口的服务器端弹出。
您需要配置两件事才能使其工作:
默认情况下,在大多数发行版中,数据包转发是禁用的,因此隧道接口中的数据包永远不会到达公共接口。您必须启用以下转发:
~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1一旦经过测试,就可以使更改在/etc/sysctl.conf中永久化
还请确保iptables没有阻塞转发的通信量:
~ # iptables -I FORWARD -j ACCEPT对于测试来说,这已经足够好了--在生产中,您可能希望使防火墙规则更加具体,但这超出了这里的范围。
的传出数据包
在启用转发的情况下,这些数据包默认被转发,其源地址不变,也就是说,在您的情况下,10.8.0.6 -这样的数据包要么被丢弃在ISP网关上,要么即使它们到达目的地,答复也永远找不到回来的方法。这些私人地址在互联网上是不可路由的。
解决方案是NAT出口流量,即用VPN服务器的公共IP替换私有10.8.0.6地址。这将确保回复到达VPN服务器,并在那里被转发回隧道。
~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE现在从您的VPN客户端尝试ping 8.8.4.4。你应该看看答案。如否,请告知:)
https://serverfault.com/questions/648118
复制相似问题