网桥斗争

暑假重建猫房网络,自然想把整件事弄好一点。于是主服务器斗胆上了Proxmox VE,因为它的LXC+KVM双虚拟环境真的很爽的样子……其他事务基本停当以后,开始折腾VPN。双重远程桌面我是真·受不了了。

VPN软件,依然是老牌Softether VPN,那叫一个舒爽。服务器,为了效率当然是PVE的LXC容器。可是两个舒爽的东西放在一起,生成了一坨翔:Softether在Linux下的网桥速率低得可怕。

嗯,我也不知道为啥这样,它就是这么坑:Softether服务端放在Linux上,客户端连外网的下行速率简直可怕。上行正常,VPN客户端之间正常,只要是经过了网桥的下行流量就无比糟心:100Kbps-1Mbps……再怎么,Softether服务端跑在Windows时,我家客户端的正常速率也有30Mbps吧…

以往一直是开个Windows虚拟机搞定,但为了LXC那效率,我就是要死磕它!

照例,Google。没有解决方法,只有一群人为着这相同的问题哀嚎,除了让我觉得自己不是唯一一个之外没有卵用。看他们猜测的原因,什么L2 loop,ISP作梗,都是在猜。

DEBUG!客户端本地的Wireshark告诉我TCP有大量乱序、重发包,看源和目标MAC地址并没有二层环。正准备在Linux服务器上抓包一看究竟,时不我与,Windows的Wireshark连Linux远程抓包一连就崩溃。没兴趣用tcpdump这种不是它zz就是把我弄成zz的工具,于是另寻他法。

接下来就开始发呆。直到我看到网桥设置里除了直接桥接到物理适配器,还有一个新建tap设备来桥接。

tap设备什么鬼,一搜,哦虚拟网卡。

接下来我灵机一动,设置了一个tap设备,把客户端桥接了上去,然后用Linux原生的bridge把它和物理网卡再桥接起来,它mmp好了。

看来是它自带的桥接的实现有毒啊。本来准备debug一下,看到源代码睡觉意识到自己功力不够。算了,能用就行。[annoying_dog.gif]

……当然哪有上面说的那么简单,虽然思路的确如此。

首先是tap设备需要内核的tun模块,而LXC作为容器,和OpenVZ一个德行,内核从宿主机。参照了https://blog.felixbrucker.com/2015/10/01/how-to-enable-tuntap-inside-lxc/上的步骤才弄好。

然后是丧病的启动顺序问题……网桥在/etc/interfaces里设置,networking服务里启动。vpn服务端的启动我放在/etc/rc.local里,rc.local服务启动。而rc.local服务在networking服务之后启动,tap设备又是在vpn服务端启动后才建立,所以网桥总是不能自动把tap设备加进去……这个我在rc.local里vpn服务端启动后sleep 5秒调用系统修改网桥的命令才解决。略丑陋。

不管了……反正vpn一切正常了。话说Softether没出新版本快一年了,不知有何问题……

评论已关闭