OpenVPN不是所有流量的默认网关


21

我正在尝试让我的客户端通过运行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

/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 为什么要使用netmask 128.0.0.0?
— 2014年


3
下次提取相关信息并将其包含在问题中。Pastebin片段的寿命有限。
— MLu 2014年

Answers:


34

解决方案分为两部分:

1.将所有流量重定向到隧道

最简单的解决方案-使用OpenVPN的--redirect-gateway autolocal选项(或将其放置在配置文件中)redirect-gateway autolocal。

2.处理OpenVPN服务器上的流量

现在,隧道已建立,所有流量都进入隧道,并从tun0接口弹出到服务器端。

您需要配置两项以使其正常工作:

一种。启用数据包转发

默认情况下,在大多数发行版中,数据包转发都处于禁用状态,因此来自隧道接口的数据包永远不会到达公共接口。您必须通过以下方式启用转发:

~ # 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.6VPN服务器的公共IP 替换专用地址。这样可以确保答复到达VPN服务器,并在那里被转发回隧道。

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3.测试

现在,ping 8.8.4.4从您的VPN客户端尝试。您应该会看到一个答复。让我们知道是否:)


现在可以完美运行了。非常感谢您提供高质量的答案。
— DrDinosaur 2014年

在客户端上,将pull添加到client.conf文件,或在命令行中添加--pull选项,以便客户端接受服务器推送的配置。另外,如果客户端在Windows Vista或更高版本下运行,请禁用UAC,否则客户端上运行的openpn服务将无法设置路由。
— 维克多

> b。NAT从隧道传出的数据包这对我很有帮助。
— FelikZ 2015年

确实要考虑到FORWARD -j ACCEPT规则使服务器成为其所有接口之间的开放路由器。不得在生产系统上使用它。但是,对于一个HowTo来说,它基本上可以快速工作,这是一个很好的指令集。
— Sprinterfreak

Redirect all the traffic into the tunnel客户端配置中的步骤吗?
— 飞机
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.