如何建立UDP通道?
1, 客户端发起, 通过Mail告诉服务器客户端经NAT映射后的IP/PORT.
2, 服务端查询自己经NAT映射后的IP/PORT并将其通过邮件返回给客户端, 同时向客户端的UDP端口做打洞操作.
3, 客户端收到服务端的Mail后向服务端UDP端口发送数据, 这时服务端UDP端口应该能收到数据, 返回一条UDP信息给客户端, 标志通道建立成功.
4, 服务端启动OpenVPN, 客户端打开OpenVPN客户端, 通过刚才建立的通道即可建立VPN连接.这个过程我用Python做了一个模型实现, 不能说是软件, 只是一些脚本, 但能稳定工作, 这里介绍一下使用过程:
1, 配置OpenVPN, 这个过程和有真实IP完全相同, 我这里列举一个非常简单的例子, 这里默认服务器运行在Linux平台, 客户端则在Windows上, OpenVPN采用2.0.9版本, 客户端我用的是OpenVPN GUI for Windows V1.0.3, 默认安装路径.
可以在局域网找两台机器(或者虚拟机)做测试, 你需要将客户端配置中的remote改为OpenVPN服务所在主机IP/PORT.
图1 OpenVPN服务端简明配置
图2 OpenVPN客户端简明配置
配置好之后, 用客户端连接服务, 应该可以连通, 然后从客户端机器ping 10.4.0.1如果响应, 则配置完成, 可进行下一步, 否则, 请查找原因, 参考OpenVPN的相关文档以及网络上关于OpenVPN配置的文章.
2, 申请两个GMail帐号做通信使用, 比如openvpn.nat.server@gmail.com, openvpn.nat.client@gmail.com, 注意申请完后进入GMail邮箱设置, 开启IMAP支持, 否则后面无法继续.
3, 获取UDP穿透NAT的代码, 从http://code.google.com/p/natvpn/downloads/list获取最新包即可, 也可以从svn获取最新的代码. 获取后解压包, 我的例子是服务器运行在Linux操作系统, 客户端运行在Windows上, 其实和系统关系不大, 图方便而已, OpenVPN和Python都是跨平台的, 需要的只是修改路径. Python版本是2.5.
解压, 先配置服务器, 把源码目录下的几个*.py和OpenVPN配置文件都拷贝到你习惯的位置, 比如/usr/local/etc下, 然后修改server.py文件中的路径, 与你的系统保持一致:
图3 server.py中需要更改的变量