开放VPN路由

开放VPN路由

到目前为止,我已经使用未加密的 openvpn 隧道成功在服务器 A 和服务器 B 之间创建了虚拟链接。我正在尝试通过服务器 A 路由服务器 B 的部分流量。服务器 B 有 5 个外部 IP,我想添加 5 个本地 VPN IP,将流量重定向到服务器 A 的 5 个 IP,这将为服务器 B 提供 10 个不同的传出 IP世界。显然,需要在两台服务器上完成一些路由,但经过一天的谷歌搜索和阅读后我没有得到任何结果。

我做到了

ip route add default via 10.0.0.2 dev tun0 table vpn_table
ip rule add from 10.0.0.1/32 table vpn_table
ip rule add to 10.0.0.2/32 table vpn_table
ip route flush cache

在服务器 B 上,与服务器 A 上的情况相同,但交换了 IP。然而,当我在服务器B上wget --bind-address=10.0.0.1 somewebsite这样做时,它不起作用,我猜是因为服务器 A 不知道如何处理该请求。

有人能指出我正确的方向吗?

编辑

有人建议服务器A不需要ip规则,所以我现在的情况是:

  1. 设置 openvpn 链接
  2. 在服务器BI上执行上面提到的四个ip命令

我想我仍然缺少服务器 A 上的一些路由信息。这是我wget --bind-address=10.0.0.1 http://www.cnn.com在服务器 B 上执行时服务器 A 上的 tcpdump 输出的内容:

tcpdump: WARNING: arptype 65534 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
07:11:58.787908 IP 10.0.0.1.42802 > 157.166.248.10.80: S 2416144580:2416144580(0) win 14600 <mss 1410,sackOK,timestamp 858359606 0,nop,wscale 7>
07:11:59.786129 IP 10.0.0.1.42802 > 157.166.248.10.80: S 2416144580:2416144580(0) win 14600 <mss 1410,sackOK,timestamp 858359856 0,nop,wscale 7>
07:12:01.788535 IP 10.0.0.2 > 10.0.0.1: ICMP host 157.166.248.10 unreachable, length 68
07:12:01.788545 IP 10.0.0.2 > 10.0.0.1: ICMP host 157.166.248.10 unreachable, length 68

服务器 B 上的 Wget 说

Connecting to www.cnn.com (www.cnn.com)|157.166.248.11|:80... failed: No route to host.

编辑 2014 年 5 月 19 日

在服务器 A 上添加了 SN​​AT,现在服务器 A 上的 tcpdump 正在给我(93.184.216.119 = www.example.com,1.2.3.4 = 服务器 A 的外部 IP,现在是来自 10.0.0.1 的数据包的来源)

09:29:44.114475 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903625938 0,nop,wscale 7>
09:29:45.113546 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903626188 0,nop,wscale 7>
09:29:47.116587 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68
09:29:47.116668 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68
09:29:47.119289 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903626689 0,nop,wscale 7>
09:29:50.120591 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68

因此,服务器 A 上的 SNAT 似乎正在工作,但不知何故无法连接到所请求的网站。服务器A iptables列表:

SNAT       all  --  10.0.0.1             anywhere            to:1.2.3.4

服务器A ip规则列表:

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

服务器 A 'route -n' 的一部分:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.1        0.0.0.0         255.255.255.255 UH    0      0        0 tun0

网关是 0.0.0.0 可能与此有关吗?

答案1

有几个问题:

  1. 将数据包路由到它们来自的地方是没有意义的。即

    ip rule add from 10.0.0.1/32 table vpn_table
    

    必须在服务器 A 上省略(ip rule add to...也没有必要);服务器 A 有“正常”路由。不过,您需要在服务器 B 上设置这样的规则(对于 B 的 IP 地址)。

  2. 您需要在服务器 A 上进行 SNAT。类似于

    iptables -t nat -A POSTROUTING -s 10.0.0.1 -j SNAT --to-source 1.2.3.4
    

相关内容