异地局域网计算机互联的一种方案

当你拥有两台工作的机器且身处异地的时候,它们之间的连接总是很麻烦。如果你想要连接的机器拥有一个公网的IP时,问题还很容易,但如果它在局域网内?虽然两台能连上国际互联网的机器在物理上是互通的,但由于NAT的缘故,你并不能直接发起远程计算机的请求,如果你没有远程计算机所在网关配置权的话。
下面将讨论一种繁琐的通过IPv6实现互联的方法,我们将首先接入IPv6,然后使用OpenVPN,实现可访问性。
提示:
1、 本文无关墙,误入者绕行
2、 如果您知道IPv4to6的方法,了解VPN,绕过本文。
3、 本文的结尾将会对其他笔者考虑过的方法做一回顾,一些情况下可以简化配置
4、 本文对技术细节和原理不做讨论,自行google
5、 由于类似配置Linux下讨论得更多,所以本文只介绍Windows的情形
6、 本文方法会加重计算机的负担,影响正常运行

一、进入IPv6
如果你需要连接的两台计算机都有IPv6地址略过这段。
由于IPv6地址域极大,所以通常可以直接通过IPv6地址在公网间连接,如果没有防火墙那么它们的端口都是暴露的,可互相连接的。
1)一种常见的IPv4转IPv6是隧道,这种方法需要一个公网IPv4地址
以上海交大的隧道为例,配置如下(以下均在命令提示符下,Win+R,cmd)
首先WinXP或2003先安装IPv6协议

netsh>int
netsh interface>ipv6
netsh interface>ipv6>install
netsh interface ipv6>exit

重启
然后设置隧道

netsh interface ipv6 isatap set router isatap.sjtu.edu.cn
netsh interface ipv6 isatap set state enabled

XP需要等一段时间才能配置正确
更多内容参考http://ipv6.sjtu.edu.cn/news/041231.php
2)如果您没有一个公网IPv4,这里介绍一个软件“六飞”,官网地址http://www.6fei.com.cn/
http://www.6fei.com.cn/ipv6-product/download_go6.html下载。
首次安装会在客户端要求注册,注册后会有一个永远属于你的IPv6地址,以后启动该软件就可以使用IPv6资源了。
另外说明如果您不希望让它随机启动,只需要删去开始菜单-所有程序-启动中六飞项即可。

二、OpenVPN
1) 首先下载一个支持IPv6的OpenVPN
https://dl.dropbox.com/u/3241202/apps/openvpn-client/openvpn-2.1.1-password_save-ipv6-yegle-install.zip
特别注意是必须支持IPv6。
OpenVPN的服务端和客户端是一套程序,两台机器安装下即可
2) 生成密钥
进入任意一台机器的OpenVPN安装目录(如C:\Program Files\OpenVPN\)

把easy-rsa目录下的vars.bat.sample改名为vars.bat
把easy-rsa下的openssl.cnf.sample改成openssl.cnf

进入命令提示符下,Win+R,cmd
输入

C:\Documents and Settings\Administrator>cd “\Program Files\OpenVPN\easy-rsa”
C:\Program Files\OpenVPN\easy-rsa>vars
C:\Program Files\OpenVPN\easy-rsa>clean-all.bat

下面生成CA,执行后需要填充的部分自行输入,需要输入y/n的部分,输y

C:\Program Files\OpenVPN\easy-rsa>build-ca.bat
C:\Program Files\OpenVPN\easy-rsa>build-dh.bat
C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat server
C:\Program Files\OpenVPN\easy-rsa>build-key.bat client
C:\Program Files\OpenVPN\easy-rsa>openvpn –genkey –secret keys/ta.key

以上就完成了密钥的设置,下面写配置文件
服务器配置文件,server.ovpn

port 1194
proto udp6
dev tap
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 172.16.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

将server.ovpn和刚才生成的C:\Program Files\OpenVPN\easy-rsa\keys\下的 ca.crt server.crt server.key ta.key dh1024.pem放入服务端的C:\Program Files\OpenVPN\config\
客户端配置文件,client.ovpn

client
dev tap
proto udp6
remote abcd:abcd::abcd 1194 #abcd:abcd::abcd表示服务器的IPv6地址
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
# Set log file verbosity.
verb 4

将client.ovpn和刚才生成的C:\Program Files\OpenVPN\easy-rsa\keys\下的 ca.crt client.crt client.key ta.key放入客户端C:\Program Files\OpenVPN\config\
现在启动两台机器的OpenVPN-gui,然后右键点击任务托盘上的图标,选connect,如连接正常会显示172.16.x.x的IP地址,这就是该机在该VPN中的地址,至此配置完成。
如果客户端连接失败,右键点击任务托盘上的图标选log,如看到

Incoming packet rejected from XXX(Expect YYY) allow this incoming source address/port by removing –remote or adding –float

可能是由于你的服务器网卡上有多个IP地址,请将客户端的IPv6改成XXX。
详细配置内容,请参考http://www.docin.com/p-43448914.html

三、一些讨论
1) 必须要IPv6吗?
事实上穿越IPv6是无奈之举,如果在服务端机器的网关(如一个路由器)上配置端口映射就不需要后文如此麻烦的东西了。
2) 必须要VPN吗?
显然不是。但由于部分软件并不支持IPv6协议或者配置麻烦,又或者是出于防火墙的缘故,并不是所有的任务都能正常工作。而VPN可以把两台计算机变成一个局域网中的机器,这样就可以解决以上问题。这里我们采用OpenVPN。
3) 为什么用OpenVPN?
事实上Windows可以很容易地假设一个VPN服务器, Vista/Win7下找到网络和共享中心-更改适配器配置,按Alt打开菜单,菜单-文件-新建传入连接,可以很容易地新建一个VPN服务器。但从外网连接时很可能发生721错误,该问题笔者没有发现很好的解决方法。同时该方法不监听IPv6端口。如果采用其他VPN服务器,对机器本身来说负担有点高。

本文的主要目的是解决异地工作的互联互通的问题,如有问题可以留言或Google。

fuzzytalker

国内某综合类学校85后。常年戴啤酒瓶底。除写代码、听音乐和睡觉外无不良嗜好。积极友情置身工坊工作。

More Posts

One Response

Leave a Reply