读书人

桥接多进程OpenVPN虚拟网卡解决多处理

发布时间: 2012-10-10 13:58:11 作者: rapoo

桥接多进程OpenVPN虚拟网卡解决多处理问题
既然有了一个OpenVPN的前端控制程序,那么就可以在一台机器上启动多个OpenVPN实例了,不同的客户端只要连接不同的实例就好。事实证明,这种方式可以完美利用多处理器的优势,比在OpenVPN内部实现的多进程或者多线程等多处理方式要好很多,这也是广义的KISS原则,也遵循了“每次做好一件事”的原则。
现在的关键问题是如何将这多个OpenVPN实例集合在一起作为一个整体。既然OpenVPN使用了更底层的虚拟网卡技术,那么做这件事的技术也和这些底层技术有关了,我试了下bridge方式,非常不错,bridge在Linux上的实现非常棒,工具也很齐全,不过一个brctl够了。方法是,将多个OpenVPN服务端实例的tap网卡bridge在一起,这样它们就可以共享一个IP地址了,也就可以使用同一个地址段了,剩下的事情,由bridge来完成吧!
我的bridge-multiVPN实现使用“预生成实例”的方式,也就是预先生成一组OpenVPN服务端实例,生成多少由CPU的个数决定,一般生成“CPU*2-2”个即可,我还是相信“操作系统的调度要比OpenVPN本身的调度做得好”...当然也可以使用“每客户端一例”的方式,不过那样对于管理不是很方便,具体也没有测试。

#!/usr/bin/python#coding=gbkif __name__ == '__main__':          import socket          import os          sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)          sock.connect(('192.168.2.249', 61195))          # 请求连接端口        sock.send('getport')        # 接收连接端口        port = sock.recv(1024)          sock.close()        # 根据服务器的建议,启动OpenVPN客户端实例        cmd = 'openvpn --config client.conf --remote 192.168.2.249 %s ' % (port)        os.popen(cmd)


读书人网 >系统运维

热点推荐