0x00 需求
计划恢复炉心工艺的fmc.moe域名正常使用,但是moe域名没法备案,数据库在国内服务器上,不太想搬,于是只好把域名解析到国外服务器上,然后再反代回国。
但是同域名反代还是会遇到备案被拦截问题,于是就需要走加密协议传输或者干脆起跨机房内网
但是我有很多台服务器,而且几乎都是跨机房的,从ucloud到阿里云,墙外有hostker和conoha,如果用普通的vpn解决方案,所有流量都得有一台服务器中转,延迟就会几乎*2,非常糟心,于是就需要一个靠谱的p2p vpn方案。
0x01 选型
openvpn
openvpn自带p2p模式,但是openvpn的p2p模式一个守护进程只能连接一对服务器和客户端,我有5台服务器,我要让他们之间互相连接,我就需要在每台机上维护4个实例,这事太难受了,抛弃
ZeroTier
要钱,免费版的功能看上去好像够用,但是我也暂时还没测试,等以后有空再试
tinc
免费开源,但是配置有点麻烦,使用tun设备,效率比ZeroTier要高
0x02 部署
第一个节点
epel中有tinc,直接yum install tinc
就可以完成安装
安装完成后,配置目录/etc/tinc
需要手工mkdir
然后在/etc/tinc
中新建一个和网络同名的目录,符合文件名称的范围内可以随意起名,我这里以dock为例
创建并编辑文件/etc/tinc/dock/tinc.conf
Name=core
Interface=dock
Mode=switch
Port=1190
PrivateKeyFile=/etc/tinc/dock/rsa_key.priv
第一行是当前节点的名称
第二行是网卡名
然后创建并编辑文件/etc/tinc/dock/hosts/core
,文件名同上面的节点名
Compression=9
Subnet=192.168.0.1/32
Address=core.933.moe
Port=1190
/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
,公钥会被附加到刚才写的节点配置文件中
第二个节点
第二个节点大同小异,毕竟是p2p协议,节点之间都是同等级的,只需要在/etc/tinc/dock/tinc.conf
中添加需要连接的服务器,写成
Name=sd
ConnectTo=core
ConnectTo=hostker
Interfce=dock
Mode=switch
Port=1190
PrivateKeyFile=/etc/tinc/dock/rsa_key.priv
多个ConnectTo就会连接多个服务器,没有直接建立连接的服务器会由其他服务器中转数据
第二个节点配置好后,需要把第二个节点的配置文件传给第一个节点,并且把第一个节点的配置文件发给第二个节点,此后每次增加节点都需要同步互相之间有连接的节点。
0x03 测试
tincd -n dock -D
可以让tincd直接运行,而不fork进程,方便查看日志,确定两边能够正常连接后,可以继续添加更多节点了
0x04 运行
centos 7下可以用systemctl start tinc@dock
运行,centos6下只能手工写init.d文件或者用tincd -n dock
,停服务靠pkill tincd
的方式了
0x05 引用
本文基于http://www.rendoumi.com/ling-wai-yi-chong-vpnfang-shi-tinc/