other vpn - tinc

vpn有很多种做法,ppp、openvpn、ipsec等,还有一种就是tinc了,为什么要用这个呢?

之前是一直用openvpn和ppp,但是openvpn有个毛病,就是客户端的ip不连续,简单说就是服务器ip是192.168.0.1的话,第一台客户端ip是192.168.0.2,那么第二台客户端就不能是192.168.0.3,因为每台客户端占了一对ip,而且运行ifconfig查看网卡的话,会显示一个无比难看的mac地址,真是接受不能:HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00,而且要固定ip的话也很麻烦,需要写个文件。

ppp就更不用说了,链接根本不可控,经常性的断线。比来比去还是tinc比较自由,ip都是可控的,静态路由也是可以写脚本控制的。而且是有iphone客户端的。

OK,下载tinc,编译安装:

wget http://www.rendoumi.com/soft/tinc-1.0.26.tar.gz  
tar -xf tinc-1.0.26.tar.gz  
cd tinc-1.0.26  
./configure 
make  
make install  

注意上面configure的时候没有指定prefix路径,所以缺省配置目录是在/etc/tinc下。

我们的网络架构,其中比较麻烦的是服务器前面是有防火墙的,防火墙做了端口映射,防火墙开放的端口和服务器开放的端口是不一样的:

tinc的配置文件架构如下图所示,其中interface_name就是vpn连接成功后,系统中多出的那块vpn网卡的名称,在这里我们起名叫做dock,hosts下放置服务器和所有客户端端的配置

我们的网卡是dock,两个客户端client01和client02,服务器是dockserver,所以目录结构就是下面这样:

以下文件均需要手动生成!!!

一、服务器端的配置文件,需要手动编辑:

/etc/tinc/dock/tinc.conf

Name=dockserver  
Interface=dock  
Mode=switch  
TCPOnly=yes  
Port=12345  
PrivateKeyFile=/etc/tinc/dock/rsa_key.priv  

注意上面:Port=12345指的是服务器内网本地监听的端口12345.

/etc/tinc/dock/dockserver

Compression=9  
Subnet=192.168.0.1/32  
Address=114.22.31.77  
Port=54321  

注意:Subnet是vpn的地址。而Address和Port需要填写通过firewall映射出去的公网ip和端口。

/etc/tinc/dock/tinc-up,权限是755,需要可执行

#!/bin/sh
ifconfig $INTERFACE 192.168.0.1 netmask 255.255.255.0  

/etc/tinc/dock/tinc-down,权限也是755

#!/bin/sh 
ifconfig $INTERFACE down  

都建立好之后,运行:

tincd -n dock -K  

会自动生成服务器的秘钥文件(/etc/tinc/dock/rsa_key.priv),并且把公钥追加到配置文件(/etc/tinc/dock/dockserver)中,服务器就配好了。

二、客户端的配置,也需要手动编辑:

同样安装好tinc,注意是有windows版本的客户端可用的。

/etc/tinc/dock/tinc.conf

Name=client01  
ConnectTo=dockserver  
Interfce=dock  
Mode=switch  
TCPOnly=yes  
PrivateKeyFile=/etc/tinc/dock/rsa_key.priv  

注意上面跟服务器端的配置不同之处:没有Port=这行了,客户端缺省监听655,多了个ConnectTo连接到服务器。 /etc/tinc/dock/client01

Compression=9  
Subnet=192.168.0.2/32  

注意:Subnet是vpn建立成功后的地址。

把服务器端的文件dockserver拷贝到客户端的/etc/tinc/dock/hosts下并做修改:

/etc/tinc/dock/dockserver

Compression=9  
Subnet=192.168.0.1/32  
Address=114.22.31.77  
Port=54321  
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAnrPrxnmSfx1OHkK5k+cxPCv+VFXJvYkVuOQIBibWlAMnQR4L9+qe  
xM/c5avNWtTvRRXSYlN2vV6ibbzpWgZN1EiTDNEC00hkGexiXBPoT/KHQ5Hnc/4i  
ZzQ6gyn0dVJ7zwu7c/vzkey0cTrW10jAKuyBzZzAweNKjh8oMJe8V92zQgQ+kBCA  
tbczZ3G26WwbT1QsBM37LPb6Bqivn0Hj2QN0jsOB1f+dpqYZ4bOMcXbQlMHz+fN7  
ZmrMe3ro/qXP3eEZBclnqtx44orCYWfRhWCD58LMIETTpX4thHwdYKsUg1J4EkaE  
NRCYH11rqhrlbK/VPXQbcc9sAdANWulD0QIDAQAB  
-----END RSA PUBLIC KEY-----

注意:生成的公钥已经追加到了文件最后,客户端的Port必须改成服务器的外网IP的port=54321。

/etc/tinc/dock/tinc-up,权限是755

#!/bin/sh
ifconfig $INTERFACE 192.168.0.2 netmask 255.255.255.0  

/etc/tinc/dock/tinc-down,权限是755

#!/bin/sh 
ifconfig $INTERFACE down  

都建立好之后,运行

tincd -n dock -K  

会自动生成客户端的秘钥和公钥放到文件中,客户端就配好了。

同样把带着公钥的client01文件拷贝到服务器上/etc/tinc/dock/hosts/client01

三、运行并调试

分别在服务器和客户端运行:

tincd -n dock  

看看进程是否正常运行,服务器端查看一下,多了一块dock网卡,ip是192.168.0.1:

dock      Link encap:Ethernet  HWaddr 4A:20:E7:17:82:F9  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::4820:e7ff:fe17:82f9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1361 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1292 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:561551 (548.3 KiB)  TX bytes:96678 (94.4 KiB)

如果要调试的话,前台运行,这样就可以看到输出的调试信息:

tincd -n dock -D -d 5  

在客户端同样查看ifconfig, 可以看到起来一块网卡dock,ip是192.168.0.2,就成功了。

comments powered by Disqus