返回信息流最近玩的一个东西-openvpn
在大运村想和别的宿舍的同学打魔兽,想了一下,好像有几种选择:
1 lan game,但因为我们都用的adsl,没法直接用lan game来玩
2 hf,vs 因为我用的linux,用不了
3 lancraft,同样因为用的linux,也用不了
4 bn,在公网好像没有能连上的bn服务器
5 用vpn,然后在lan game里玩
要想用lan game来玩魔兽,要求两个条件:(A建立游戏,B要加入A的游戏)
1 A建立游戏时会向局域网广播,udp源端口是6112,B要能收到这个广播才会在魔兽的lan game里看到A建的游戏
2 看到A建的游戏后,B双击进入游戏会建立一个tcp连接,端口也是6112
现在最大的问题是A建立游戏时广播不会被B收到,利用vpn可以解决这个问题.
但VPN也有许多种,像pptp,l2tp,ipsec等,这些都是内核中实现的技术,还有一种叫openvpn,是纯用户空间的vpn技术.
我先试了试pptp,设A运行linux,安装pptpd,C是同一个宿舍的另一台机器,C用windows的拨号连接直接可以连接到linux上,但因为pptp建立的是一个点对点的连接,怎么让A上的广播也通过这个接口发出去让C也收到? 因为A上向255.255.255.255广播时,究竟从eth0还是eth1出去并不确定,和系统有关,bsd好像规定广播只对系统启动时第一个up的支持广播的接口(见tcp/ip详解或unix网络编程,记不清了). 反正我的系统上对255.255.255.255的广播都是从eth0出去,为了让广播也从vpn那个接口出去,可以用一个叫bcrelay的程序,这个是随pptpd一块发布的,可以把到一个接口的广播都转发到另一个接口上.
问题到此似乎解决了,但有一个很关键的问题,A和B都通过ADSL上网,而且都使用了宽带路由器,所以A B只有一个192.168的私有地址,要想让B用拨号连接到A的pptpd,必须在A所在的宽带路由器上设NAT,但vpn的nat穿越现在还有很多问题,pptp的情况类似于ftp,也就是说pptp连接建立的过程中会用到别的随机端口,除非路由器的nat支持pptp-contrack,否则无法配置路由器的nat让B能连上A的pptpd,而A用的路由器恰好不支持,结果A无法连上路由器之后的A的pptpd
正在绝望时我发现了openvpn:
openvpn是纯用户空间的vpn,只需要一个udp端口(或tcp端口,可以配置),内部用ssl,绝对安全,而且跨平台.
因为openvpn只使用一个udp端口,所以穿跨nat没有问题.
用openvpn的大体步骤:
1 A写openvpn的server.conf配置,里面主要写接口的类型,分配给B的地址范围,server证书的路径.
接口类型里指定tap类型,B连接到A时生成的接口tap0可以被桥接到A本地的eth0,形成一个局域网
server证书是A运行openvpn自带的一些脚本得到的,B可以通过它识别server是谁
2 A用openvpn自带的脚本得到几个不同的client的证书,然后把它发给不同的client,比如B,C
3 B写vpn的client.conf配置,主要是指定从A收到的证书的路径和服务器的地址.
然后:
A用openvpn建立一个tap0接口,用brctrl把tap0和eth0桥接起来,再运行openvpn server.conf启动openvpn,B执行openvpn client.conf就会连接到A了,因为A事先把tap0和eth0桥接起来了生成br0接口,所以eth0和B已经在一起局域网里了,A往br0的广播可以同时被eth0所在的局域网和B收到,如果B把它那端的tap和它的eth0再桥接起来,估计A B两个局域网都可以互通了.
当然在这之前需要在A的路由器上做 openvpn用的那个udp端口的DNAT,还需要做udp和tcp 6112的DNAT,否则B看了A了也连不上A建的游戏.
如果是在校园网的环境用vpn玩游戏,比如学十的想和学九的连,直接用pptp就可以,用openvpn也可以,但如果A把tap0和eth0桥接起来,B也把tap0和eth0桥接起来会不会被封?
这是一条镜像帖。来源:北邮人论坛 / linux / #32632同步于 2007/12/22
Linux机器人发帖
最近玩的一个东西-openvpn
sunway
2007/12/22镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。