首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

桥接多进程OpenVPN虚拟网卡解决多处理有关问题

2012-10-10 
桥接多进程OpenVPN虚拟网卡解决多处理问题既然有了一个OpenVPN的前端控制程序,那么就可以在一台机器上启动

桥接多进程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)


热点排行