前言

这段时间忙着照顾家人,因为老母亲又双叒叕因为主动脉夹层的原因做了第二次心脏手术,需要24小时陪护,所以我大部分时间呆在乡下,就有了乡下 & 杭州异地组网和通讯的需求。

上一篇文章记录了tailscale的子网路由(subnet routers)功能,我拿它作为跳板机,这样我只需要在一台设备上安装tailscale,就可以直接通过原来的 192.168.1.* 的内网ip地址直接访问局域网里的nas、玩客云、openwrt,甚至可以直接访问光猫的后台地址,不需要再每台机器装tailscale然后使用100开头的vpn网络IP地址来访问。

tailscale还有另一个功能:出口节点(exit nodes)。看了官方文档,作为中国人,我第一时间想到的应用场景,就是翻墙。😄

正好我好友jrr在澳洲,和他一起玩了一下这个exit nodes功能,自此我有了一个悉尼的网络出口,😄。


功能释疑

exit nodes的官方文档:Exit Nodes (route all traffic)

通俗来讲,就是在一个设备上安装tailscale,启用exit nodes功能。然后其它装了tailscale的机器,比如机器A,可以指定这台设备为出口(exit node)。之后机器A的所有网络流量都会由指定的出口节点进行路由转发。

官网的示意图。

部署

第一步:下载&安装tailscale

官方地址:Download

第二步:开启ip转发功能

这里以linux为例,因为我把tailscale装在linux小盒子上。

官方文档:Exit Nodes install

如果你的linux系统存在/etc/sysctl.d路径,执行以下命令

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

否则执行以下命令

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

第三步:启动tailscale

完成以上配置以后,启动即可,加上exit node的参数。

sudo tailscale up --advertise-exit-node

第四步:控制台开启exit nodes功能

登录tailscale的网页控制到,找到对应的机器,点开设置菜单

勾选启用exit node功能,保存。

好了,到这一步就完成了出口节点机器的部署。接下去只要在其它安装了tailscale的机器上指定这台机器作为网口出口节点即可。

第五步:指定exit node

在另一台已经安装了tailscale的机器上,启动tailscale并指定exit node的ip地址。

sudo tailscale up --exit-node=<exit-node-ip>

至此,这台机器的所有网络流量都由出口节点那台机器进行路由转发。

如果出口节点的机器在hk、jp、au、us,那对应的你就获得了hk、jp、au、us的出口和ip。

第六步:取消路由

如果不需要出口节点进行网络流量转发了,命令如下

sudo tailscale up --exit-node=

等号后面留空即可。