链接引导
tailscale官网:https://tailscale.com/download
tailscale的docker官网页面:https://hub.docker.com/r/tailscale/tailscale
获取Auth key(认证key)
打开官网,登录后,点击右上角 setting-Keys-Generate auth key
key的配置如下
拉取镜像
官方命令:
docker run --name=tailscaled -d -v /var/lib/tailscale:/var/lib/tailscale --network=host --cap-add=NET_ADMIN --cap-add=NET_RAW -e TS_AUTHKEY=这里粘贴auth key -e TS_STATE_DIR=/var/lib/tailscale --restart unless-stopped tailscale/tailscale
TS_ROUTES=192.168.111.0/24 【通告子网路由。相当于tailscale set --advertise-routes=
。要接受通告的路由,请使用TS_EXTRA_ARGS
传入--accept-routes
。】
TS_AUTHKEY=【这里粘贴用于验证容器的Tailscale 身份验证密钥】
运行容器后配置
终端执行上面命令后,容器会生成,此时打开tailscale官网进行配置
- 编辑名字
- 编辑ipv4地址
- 关闭过期
- 编辑子路由-进去打钩IP地址
注意
为什么每次容器重启时都会得到一个新的IP地址?
容器最常见的用途是动态的,容器根据负载来来去去。默认情况下,tailscaled
将其状态存储在 /tmp 中,并期望成为临时节点。
为了支持容器在重新启动后保留其设置和身份的长期服务,需要完成以下几件事:
- 容器必须提供持久化存储,例如
-v /var/lib/tailscale:/var/lib/tailscale
- 将 TS_STATE_DIR 设置为持久存储已挂载的位置,例如
-e TS_STATE_DIR=/var/lib/tailscale
为什么传入连接有效但传出连接无效?
为了支持使用 Linux 套接字的任意进程,tailscaled
需要访问/dev/net/tun
许多容器不提供的设备。默认情况下,Dockerfile 在用户空间网络模式下运行,其中通过 Wireguard 隧道的传入连接将转发到同一端口,localhost
但启动新连接需要使用 SOCKS5 或 HTTP 代理。
要支持来自任何套接字应用程序的传出连接:
- 容器必须配备TUN设备,例如
-d /dev/net/tun:/dev/net/tun
TS_USERSPACE
必须设置为 false,比如-e TS_USERSPACE=0