tailscale docker部署【局域网设备免配置互访】【已避雷】
一、介绍
一键部署docker tailscale,主路由配置静态路由指向docker tailscale容器,实现局域网多设备直接访问100.x.x.x远端组网设备。
二、部署docker前准备
1、申请auth key
https://login.tailscale.com/admin/settings/keys

2、在宿主机:创建文件夹和文件
- 新建文件夹
- state
 
- 新建文件
- tailscale-start.sh
- docker-compose.yml
 

2、新建一个命名为【tailscale-start.sh】脚本文件,后面要挂载到docker容器内
用于配置 NAT 转发规则,让容器接收主路由的数据包。复制一下命令到脚本文件,照抄即可:
#!/bin/sh
set -e
echo "🟢 /tailscale-start.sh 启动"
sleep 30
# 等待 tailscale0 接口出现
echo "🕓 等待 tailscale0 接口..."
for i in $(seq 1 30); do
    if ip link show tailscale0 >/dev/null 2>&1; then
        echo "✅ tailscale0 已就绪"
        break
    fi
    echo "⏳ tailscale0 尚未就绪,等待 $i 秒..."
    sleep 1
done
if ! ip link show tailscale0 >/dev/null 2>&1; then
    echo "❌ tailscale0 接口未检测到,退出脚本"
    exit 1
fi
# 启用 IP 转发
echo "🔹 启用 IP 转发"
sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1 || echo "⚠️ IPv4 转发无法启用"
# 无需开启ipv6转发,没用,而且有bug
# sysctl -w net.ipv6.conf.all.forwarding=1 >/dev/null 2>&1 || echo "⚠️ IPv6 转发无法启用"
# 配置 NAT 转发规则(防重复)
echo "🔹 配置 iptables NAT"
iptables -t nat -C POSTROUTING -o tailscale0 -j MASQUERADE 2>/dev/null || \
iptables -t nat -A POSTROUTING -o tailscale0 -j MASQUERADE
iptables -C FORWARD -i eth0 -o tailscale0 -j ACCEPT 2>/dev/null || \
iptables -A FORWARD -i eth0 -o tailscale0 -j ACCEPT
iptables -C FORWARD -i tailscale0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || \
iptables -A FORWARD -i tailscale0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "✅ NAT 转发规则已成功设置"
sleep 30
# 开启出口节点(路由所有流量)
echo "🔹 启用 出口节点"
tailscale set --advertise-exit-node
# tailscale up
echo "🟢 /tailscale-start.sh 执行完毕"
3、配置【docker-compose.yml】
因为我的容器挂载的网络是macvlan,而不是host,具体怎么创建macvlan网卡,自己百度。
version: "3.4"
name: tailscale
services:
  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    # ghcr.nju.edu.cn/
    hostname: tailscale
    privileged: true                                                          # 一定要高权限运行docker,否则无法配置IP转发
    networks:
      macvlan:
        ipv4_address: 192.168.123.227                                         # 给容器分配一个局域网ip
    environment:
      - TS_AUTHKEY=tskey-auth-ksdfsdb611CNTRL-DiXeNuihasddSrEkFJrZamKeAuchHn6 # 替换你刚申请的key
      # - TS_EXTRA_ARGS=--advertise-tags=tag:container                        # 不需要标记,重启会失联
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_USERSPACE=false
      - TS_ROUTES=192.168.123.0/24                                            # 填主路由的网段,不使用子网可以#掉
    volumes:
      - ./state:/var/lib/tailscale                                            # 挂载刚刚新建的文件夹【必须】
      - ./tailscale-start.sh:/tailscale-start.sh                              # 挂载刚刚新建的sh脚本
    devices:
      - /dev/net/tun:/dev/net/tun
    cap_add:
      - net_admin
    restart: unless-stopped
    command: sh -c "sleep 10 && /tailscale-start.sh & /usr/local/bin/containerboot && wait" # 容器启动时运行sh脚本,照抄,无需修改
networks:
  macvlan:
    external:
      name: macvlan
4、主路由配置静态路由转发

三、启动docker
# 在宿主机运行docker-compose.yml
docker-compose up -d
四、验证访问
在局域网随便一个设备浏览器访问:http://100.100.100.100/,该地址为docker tailscale容器的网关管理页面
若出现,则大功告成!!

现在局域网设备随意访问100.x.x.x远端设备了。
五、最后设置
1、禁用密钥过期

2、如果要配置局域网设备子网,共享到外面,请设置

 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号