tinc-vpn

参考资料:
http://www.tinc-vpn.org/examples/redirect-gateway/

0. 跟OpenVPN, iodine一样,需要tun设备支持
/dev/net/tun

1. 安装

apt-get install tinc

最新版
wget http://ftp.tw.debian.org/debian/pool/main/t/tinc/tinc_1.1~pre11-1_amd64.deb
dpkg -i tinc_1.1~pre11-1_amd64.deb

2.配置
一台计算机中可以运行多个tincd守护进程(daemon), 每个daemon只能连接到一个VPN网络,
你可以使用-n选项来 为每个tinc守护进程设置一个网络名称.
守护进程将把 /etc/tinc/NETNAME/ 这个目录 作为 配置文件的根目录. 这里NETNAME 就是 -n 选项设置的参数.
你也将在 syslog里看到 tinc.NETNAME的日志信息

即使你只运行一个tinc实例, 也建议你使用NETNAME网络名
如果不使用 -n 选项, 那么tinc将在/etc/tinc目录下 寻找配置文件, 而不是 /etc/tinc/NETNAME/

——————————————————————————————
同一个网络中的不同tinc守护进程,都必须有唯一的名称来标识自身. 这个名字 用来声明在 /etc/tinc/NETNAME/tinc.conf配置文件中
建议选择 主机名, 所有者的名字 或者 位置的名字 来方便记忆

如果你运行的是tinc 1.1版本, 可以用下面的命令来建立基本的配置文件

tinc -n NETNAME init NAME
实例
# tinc -n tiny init hongkong
Generating 2048 bits keys:
...............................+++ p
.........+++ q
Done.
Generating Ed25519 keypair:
Done.

上面的初始化命令会生成 RSA 和 Ed25519 的私钥/公钥 .

私钥为 /etc/tinc/NETNAME/ 目录下的 rsa_key.priv 和 ed25519_key.priv
公钥 内容 写在 主机配置文件 /etc/tinc/NETNAME/hosts/NAME 中

在 1.0 版本中需要用tincd来生成KEY

tincd -n tiny -K

上面的命令生成RSA密钥, 默认位数是2048

init命令生成了如下文件, 可以根据需要对配置进行手动编辑

/etc/tinc/tiny/hosts/hongkong  里面存着 RSA的公钥  和  Ed25519PublicKey
/etc/tinc/tiny/ed25519_key.priv
/etc/tinc/tiny/rsa_key.priv
/etc/tinc/tiny/tinc.conf
/etc/tinc/tiny/tinc-up

—————————————————————————————-
特定主机的配置文件 是对服务器配置文件的补充. 尽管所有的本地主机选项都可以放到 /etc/tinc/NETNAME/tinc.conf中
但是, 主机特定的配置选项, 最好放在 主机配置文件里. 因为这样更容易迁移到其他节点.

—————————————————————————————–
虽然你可以手动编辑配置文件, 但是推荐你用 tinc命令来改变配置变量
编辑 vi /etc/tinc/tiny/tinc.conf

Name = hongkong
AddressFamily = ipv4
Interface = tun0
PrivateKeyFile=/etc/tinc/tiny/rsa_key.priv

编辑主机配置文件 vi /etc/tinc/tiny/hosts/hongkong

-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Ed25519PublicKey = ...
Address = 4.5.6.7
#Subnet = 10.0.0.1/32  要改成能接受VPN子网来的任意包, 不然会抱怨: Cannot route packet from intel (MYSELF port 655): unknown IPv4 destination address 223.6.6.6
Subnet = 0.0.0.0/0

hongkong主机的/etc/tinc/tiny/tinc-up

#!/bin/sh

ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 4.5.6.7

hongkong主机上的/etc/tinc/tiny/tinc-down

#!/bin/sh

iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 4.5.6.7
ifconfig $INTERFACE down

hongkong主机有公网IP
intel 主机在NAT后面, 发起一个到hongkong的VPN链接

在intel主机上
/etc/tinc/tiny/tinc.conf

Name = intel
AddressFamily = ipv4
Interface = tun0
ConnectTo = hongkong
PrivateKeyFile=/etc/tinc/tiny/rsa_key.priv

/etc/tinc/tiny/hosts/intel

-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Ed25519PublicKey = ...
Subnet = 10.0.0.2/32
#客户端分配 只含有一个IP地址的子网
#tinc支持将一个Subnet分配给一个节点,让该节点通过DHCP或者static routing的方式来对整个VPN进行访问。但是我们只需要用服务器来翻墙,只分配一个IP就够了

/etc/tinc/tiny/tinc-up

#!/bin/sh

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

tinc-down

#!/bin/sh

#ifconfig $INTERFACE down

客户端 /etc/tinc/tiny/host-up

#!/bin/sh

VPN_GATEWAY=10.0.0.1
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
echo $ORIGINAL_GATEWAY

ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route add default via $VPN_GATEWAY dev $INTERFACE
ip route del default $ORIGINAL_GATEWAY

echo -e "nameserver 8.8.4.4nnameserver 4.2.2.4" > /etc/resolv.conf

客户端 /etc/tinc/tiny/host-down

#!/bin/sh

ORIGINAL_GATEWAY=ip route show | grep ^$REMOTEADDRESS | cut -d ' ' -f 2-5
ip route del $REMOTEADDRESS

ifconfig $INTERFACE down
ip route add default $ORIGINAL_GATEWAY

把hongkong主机 /etc/tinc/tiny/hosts/hongkong 复制到 intel主机的 /etc/tinc/tiny/hosts/ 目录
同时把intel主机的 /etc/tinc/tiny/hosts/intel 复制到 hongkong主机的 /etc/tinc/tiny/hosts/ 目录

首先 在hongkong主机(服务端)上运行

tincd -n tiny
或者调试模式
tincd -n tiny -D -d 5

tincd -n tiny -d5 -D

这时服务端

$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0

然后在 intel主机(客户端)上运行

tincd -n tiny

这样就可以了

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 tun0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
4.5.6.7         192.168.99.1    255.255.255.255 UGH   0      0        0 eth0
192.168.99.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

手动修改路由的命令

route add -host 45.117.100.245 gw 192.168.99.1
route add default gw 10.0.0.1
route del default gw 192.168.99.1

服务端自启动
编辑/etc/tinc/nets.boot
内容为

tiny

然后运行

service tinc start

——————另外的写法

客户端host-down

#!/bin/sh

ORIGINAL_GATEWAY=`ip route show | grep ^$REMOTEADDRESS | cut -d ' ' -f 2-5`
echo $ORIGINAL_GATEWAY

ip route del $REMOTEADDRESS
ip route replace default $ORIGINAL_GATEWAY

注意是replace, 用add default会报错

RTNETLINK answers: File exists

请参考
https://bbs.archlinux.org/viewtopic.php?id=175875

tinc-down可以不用

tinc会自己关闭tun接口

发表评论

电子邮件地址不会被公开。 必填项已用*标注