我在运行 Debian 5 的 VPS 上运行 OpenVPN 服务器,在 Ubuntu 11.04 Desktop 上运行 OpenVPS 客户端。我希望客户端的所有传出流量都通过 VPN 服务器进行隧道传输。
我能够启动从客户端到服务器的连接,并在它们之间成功 ping 通,但是当我尝试从客户端访问外部 IP 地址时,却没有成功。
例如,通过 IP ping google 时:
ping -n 74.125.91.106
PING 74.125.91.106 (74.125.91.106) 56(84) bytes of data.
^C
--- 74.125.91.106 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6048ms
在服务器端,我可以看到通过隧道发出的 ping 请求,但没有返回任何答复:
tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
21:24:59.384736 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 1, length 64
21:25:00.391970 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 2, length 64
21:25:01.400394 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 3, length 64
21:25:02.408914 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 4, length 64
21:25:03.416378 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 5, length 64
21:25:04.424289 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 6, length 64
21:25:05.431804 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7537, seq 7, length 64
我还可以在服务器上的 venet0 接口上看到这些:
tcpdump -i venet0:0 'icmp[icmptype] == icmp-echo or icmp[icmptype] == icmp-echoreply'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0:0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
21:39:11.397967 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 1, length 64
21:39:12.407609 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 2, length 64
21:39:13.415194 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 3, length 64
21:39:14.423050 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 4, length 64
21:39:15.431005 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 5, length 64
21:39:16.439687 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 6, length 64
21:39:17.446949 IP 10.8.0.6 > qy-in-f106.1e100.net: ICMP echo request, id 7588, seq 7, length 64
我还可以从服务器成功 ping google。
知道这可能是什么原因造成的吗?
服务器配置文件:
开发调谐 服务器 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt ca 证书 证书服务器.crt 密钥服务器.key dh dh1024.pem 推“路由 10.8.0.0 255.255.255.0” 推“重定向网关” 康普 保持活动 10 60 ping 定时器 rem 坚持-tun 持久密钥 群组守护进程 守护进程
客户端配置文件:
远程 <<服务器 IP>> 开发调谐 康普 ca 证书 证书客户端1.crt 密钥客户端1.key 路由延迟 2 路由方法 exe 重定向网关 def1 dhcp 选项 DNS 10.8.0.1 动词 3
答案1
您需要映射“传入”流量,以便将其正确路由到客户端。即,您需要在服务器上为客户端的 IP(VPN IP)设置 NAT 转换。
您看到的是服务器不知道如何转发回复。
以下是如何执行此操作的说明:http://openvpn.net/index.php/open-source/documentation/howto.html#redirect- 查看服务器上的 iptables 配置。
答案2
已启用 IP 转发?源地址为 VPN 客户端?
源地址转换是将(VPN 客户端)地址转换为外部 IP 地址。正如 sunny 所说,接收服务器不知道如何路由回内部 IP,即使您的 ISP 一开始没有过滤它。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -a FORWARD -i tun0 -j 接受