我使用了@ user48116提供的答案,它的工作原理就像一个魅力。设置实际上非常简单!
注意:我通过仅连接到一台服务器的两个连接来实现此目的,因为这已经为我解决了问题。如果要尝试使用两台服务器进行安装,最简单的方法可能是使用端口转发将UDP端口从第二台服务器转发到第一台服务器,并使用此处所述的相同配方。我自己还没有测试过。
首先,请确保您具有支持绑定的2.6内核(在所有现代发行版中均为默认设置),并且已安装ifenslave。
接下来,将其放入/etc/rc.local或您喜欢的任何其他位置,但是请确保它在 openvpn启动之前已运行(因为它将尝试绑定到bond0):
客户:
modprobe bonding mode=broadcast
ifconfig bond0 10.10.0.2 netmask 255.255.255.0 up
如果需要,您可以在此处添加一些路由,但是请确保也从另一侧进行所有正确的路由。
route add -net 10.7.0.0/24 gw 10.10.0.1
服务器:
modprobe bonding mode=broadcast
ifconfig bond0 10.10.0.1 netmask 255.255.255.0 up
创建一个/etc/openvpn/tap-up.sh脚本(不要忘记使用chmod a + x tap-up.sh将其标记为可执行):
#!/bin/sh
# called as: cmd tap_dev tap_mtu link_mtu ifconfig_local_ip ifconfig_netmask [ init | restart ]
ifenslave bond0 "$1"
接下来,将bridge0a.conf和bridge0b.conf与共享密钥一起添加到/ etc / openvpn /中。除了不同的端口外,a和b的文件是相同的(例如,对于b使用3002)。用服务器的公用IP替换11.22.33.44。
客户:
remote 11.22.33.44
dev tap
port 3001
rport 3001
secret bridge.key
comp-lzo
verb 4
nobind
persist-tun
persist-key
script-security 2
up /etc/openvpn/tap-up.sh
服务器:
local 11.22.33.44
dev tap
port 3001
lport 3001
secret bridge.key
comp-lzo
verb 4
script-security 2
up /etc/openvpn/tap-up.sh
不要忘记编辑/ etc / defaults / openvpn以确保您的新VPN配置已启动。重新启动计算机,或加载rc.local并手动重新启动openvpn。
现在您可以测试设置了:
# ping 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=50.4 ms
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=52.0 ms
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=52.2 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=53.0 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=53.1 ms (DUP!)
--- 10.10.0.1 ping statistics ---
2 packets transmitted, 2 received, +6 duplicates, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 50.428/51.786/53.160/0.955 ms
如果一切顺利,并且工作顺利,您将为每个ICMP软件包看到四个答复:您的软件包在本地重复,而对这两个软件包的答复又在远程重复。对于TCP连接,这将不是问题,因为TCP只会忽略所有重复项。
这是UDP数据包的问题,因为要由软件来处理重复数据。例如,DNS查询将产生四个答复,而不是预期的两个答复(并使用四倍于正常带宽的响应而不是两倍):
# tcpdump -i bond0 -n port 53
listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:30:39.870740 IP 10.10.0.2.59330 > 10.7.0.1.53: 59577+ A? serverfault.com. (33)
13:30:40.174281 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.174471 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.186664 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.187030 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
祝好运!