开源虚拟私人网络 bonding 要点及放弃

环境:ubuntu server 16.04.6 kernel 4.4.0-142-generic

bonding需要使用tap,tun在这个环境里已经不能bonding,需要在系统启动时就建好tap,不能随着连接状态动态创建。另外是需要两边的适配器状态同步,一边down后另一边也要down,up同理,不这样处理通信会有问题。

开源虚拟私人网络 --mktun --dev-type tap --dev <dev-name> #创建tap
开源虚拟私人网络 --rmtun --dev-type tap --dev <dev-name> #移除tap

配置文件不能指定IP, 参考如下。

#server.conf
mode server
proto tcp-server
port <port>
dev <dev-name>
dev-type tap
mssfix 1250
txqueuelen 1000
#keepalive 1 30 #禁用TCP/UDP ping避免bonding后无包时断开
#persist-tun
persist-key
script-security 2
log-append openvpn.log
verb 4
status status.log 300
comp-lzo adaptive #禁用压缩,优化CPU
comp-noadapt #禁用压缩,优化CPU
cipher none #禁用加密,优化CPU
auth none
tls-server
ca <ca>
dh <dh>
cert <cert>
key <key>
key-method 2
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA
reneg-sec 900
tran-window 900
tls-auth <ta> 0
client-connect "ifup <dev-name>" #p2p两边的link状态同步
client-disconnect "ifdown <dev-name>" #p2p两边的link状态同步
#client.conf
remote <remote>
#袜子-呆狸 <袜子> #这里可以按需要加袜子
#袜子-呆狸-重试
proto tcp
nobind
dev <dev-name>
dev-type tap
mssfix 1250
txqueuelen 1000
#keepalive 1 30 #禁用TCP/UDP ping避免bonding后无包时断开
persist-tun
persist-key
script-security 2
log-append openvpn.log
verb 4
status status.log 300
comp-lzo adaptive #禁用压缩,优化CPU
comp-noadapt #禁用压缩,优化CPU
cipher none #禁用加密,优化CPU
client
auth none
tls-client
ca <ca>
cert <cert>
key <key>
key-method 2
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA
reneg-sec 900
tran-window 900
tls-auth <ta> 1
ns-cert-type server
up "ifup bond-client1" #p2p两边的link状态同步
down "ifdown bond-client1" #p2p两边的link状态同步
up-restart #重连接时触发上面两个脚本
#ifup
#!/bin/sh
ifconfig $1 up
exit 0

#ifdown
#!/bin/sh
ifconfig $1 down
exit 0

按这样的配置创建多个,tap起来后。配置bonding,这些应该可以通过ifenslave并修改”/etc/network/interfaces”配置,但是比较麻烦,直接命令行配置简单粗暴。server和client两边的命令是一样的。

echo bonding >> /etc/modules #把bonding加到自动加载列表
modprobe bonding #加载bonding
echo -bond0 > /sys/class/net/bonding_masters #移除原来的bond0
echo +bond0 > /sys/class/net/bonding_masters #创建bond0
echo 0 > /sys/class/net/bond0/bonding/mode #添加slave前设置mode
echo 100 > /sys/class/net/bond0/bonding/miimon #添加slave前设置mii
echo +<dev-name1> > /sys/class/net/bond0/bonding/slaves
echo +<dev-name2> > /sys/class/net/bond0/bonding/slaves
echo +<dev-name3> > /sys/class/net/bond0/bonding/slaves
ifconfig bond0 <ip>

目前就mode 0 (balance-rr) 比较稳定,其他mode还是有问题,这样配置后在mode 0下随便down掉一两个tap都是没有问题,可以实现failover。但是 balance-rr 是轮流发送,整体时延取决于最慢的tap。对于网络非常不稳定的情况下能保证可用性,但是没办法保证性能。

参考:
https://forums.开源虚拟私人网络.net/viewtopic.php?t=14153
https://blog.51cto.com/linuxnote/1680315

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注