因公司部分公共服务都建立在内网服务器中,所以在非工作室网络环境下是无法运用这些服务的。本篇文章主要来记录一下依据 zerotier 来异地组网的过程。

注册账号

www.zerotier.com/,能够直接运用 google 或许 github 账号登录。

创建 network
zerotier 无公网 ip 建立长途工作环境

在 settings 中装备 Access Control 为 Private 表明需求授权后才能接入。

内网服务器装备(centos7)

装置 zerotier

curl -s https://install.zerotier.com | sudo bash

启动 zerotier 服务

sudo systemctl start zerotier-one

加入 zerotier 网络

sudo zerotier-cli join <your_network_id>

在 zerotier 中进行授权

zerotier 无公网 ip 建立长途工作环境
然后检查网络状况

sudo zerotier-cli listnetworks

zerotier 无公网 ip 建立长途工作环境

装备转发规矩,意思就是将经过 zerotier 网卡的恳求转发到服务器的网卡上

vim /etc/sysctl.conf

在最终一行添加如下内容,表明启用 ipv4 转发

net.ipv4.ip_forward = 1

应用更改

sudo sysctl -p

装备网卡相关环境变量,能够经过 ifconfig 指令检查,依据服务器 ip 和 zerotier ip 找到对应的网卡名称

PHY_IFACE=衔接内网的网卡的姓名
ZT_IFACE=zerotier的虚拟网卡姓名

更新路由

sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE
sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT
sudo iptables-save

耐久化路由表

sudo mkdir -p /etc/sysconfig/
sudo sh -c "iptables-save > /etc/sysconfig/iptables"

zerotier 静态路由装备

Destination 为服务器的实际网段,Via 为 zerotier 的 ip 地址。这条规矩表明当你在访问 172.168.20.X 的服务时会转发给 172.27.116.15 。

zerotier 无公网 ip 建立长途工作环境

客户端衔接(以 mac 为例)

到这儿 www.zerotier.com/download/ 下载 mac pkg 装置包,装置后点击 “join new network”,输入 <your_network_id>,然后点击 “join”。检查网络衔接状况 Status 是否显示 OK,假如不是,能够测验勾选下图红框中的两项。

zerotier 无公网 ip 建立长途工作环境

待衔接成功后,能够测验 ping 一下内网服务器的 ip,发现能够 ping 通了。

zerotier 无公网 ip 建立长途工作环境

可是不难发现推迟很高……假如没有公网 ip 的话,到这儿也能将就着用一下了。有公网 ip 的话,能够自建 moon 节点来提高网络访问速度。

自建 moon 节点过程

我这儿运用的是一台阿里云的 ecs 服务器,体系也是 centos7 的,首先装置好 zerotier,然后 join 到组网中。

生成 moon 装备文件过程如下:

cd /var/lib/zerotier-one/
zerotier-idtool initmoon identity.public > moon.json

履行完成后会在当前目录下生成一个 moon.json 的文件,然后运用 vim 来编辑 json 中的 stableEndpoints 字段,值为 ip/9993,ip 为该服务器对应的公网 ip。

zerotier 无公网 ip 建立长途工作环境

装备完成后记住在阿里云的安全组中铺开 udp 9993 端口。

创建签名文件

zerotier-idtool genmoon moon.json
mkdir moons.d
sudo mv 000000xxxxxxxx.moon moons.d/
systemctl restart zerotier-one # 重启中转服务

客户端和内网服务器装备

加入 moon 节点指令,留意:内网服务器和 client 的机器都需求添加 moon 节点。

zerotier-cli orbit id id # moon.json 文件中的 id

经过 zerotier-cli listpeers 指令能够检查已衔接的节点,发现多了一个 moon 节点,就表明衔接成功了。

zerotier 无公网 ip 建立长途工作环境

然后我们再测验来 ping 一下内网服务器的 ip

zerotier 无公网 ip 建立长途工作环境

发现推迟显着降低了,正常运用 ssh 啥的根本没问题了。

踩坑

内网服务器中有依据 docker 布置的 gitlab,装备后非 docker 的服务能够正常访问,docker 布置的服务无法访问,经过一番排查,最终是经过清理了 iptables 的规矩后处理了。

清理过程如下:

iptables -X
iptables -F
iptables -Z

假如提示,docker is busy 的话,需求先履行 systemctl stop docker,停止 docker 服务。

参考文章