linux下用zerotier打通整个内网!docker安装zerotier到转发步骤

最近被备案搞的烦,本来是凉心云的备案,解析到套路云一直被拦截,而且是机房层面的拦截,hosts都没用,干脆直接打通

docker安装

官方说明

仓库

https://hub.docker.com/r/zerotier/zerotier

命令

To join a network, simply supply it on the command-line; you can supply multiple networks.

docker run --name myzerotier --rm --cap-add NET_ADMIN --device /dev/net/tun zerotier/zerotier:latest abcdefdeadbeef00

Once joining all the networks you have provided, it will sleep until terminated. Note that in ZeroTier, joining a network does not necessarily mean you have an IP or can do anything, really. You will want to probe the control socket:

docker exec myzerotier zerotier-cli listnetworks

修改成docker-compose

version: '3'
services:
  zero:
    container_name: zero
    image: zerotier/zerotier:latest
    command: zerotier网络ID
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    restart: always
    deploy:
      resources:
        limits:
          cpus: '0.1'
          memory: 100M
    privileged: true
    network_mode: "host"

要在Docker中安装的ZeroTier客户端与宿主机通信,需要确保Docker容器具有足够的权限和正确的网络设置。

  1. 使用与Docker主机相同的网络:在创建Docker容器时,可以选择使用与Docker主机相同的网络。这将允许容器直接访问主机网络,从而实现与主机的通信。
  2. 使用高权限执行容器:在创建Docker容器时,确保选中“使用高权限执行容器”选项。这将赋予容器更多的权限,使其能够访问主机的网络接口。
  3. 启用自动重新启动:在高级设置中,启用“自动重新启动”选项。这将确保在容器出现问题时能够自动重启,从而保持与主机的连接。
  4. 配置ZeroTier~~~~:在容器内部,需运行~~~~`zerotier-cli join `~~~~命令来加入ZeroTier网络²。然后,您需要在ZeroTier的Web界面中授权新的成员。compose已经设定了
  5. 检查连接:最后容器内部运行zerotier-cli peers命令来检查连接状态。

到现在已经能访问到宿主机了,但是跟宿主机同一局域网的机器访问不到

思路:其实就是路由的问题,如果是在软路由上肯定没这个问题

  1. 启用IP转发:在宿主机A上,需要启用IP转发。

    sudo sysctl -w net.ipv4.ip_forward=1
    sudo sysctl -p
    
  2. 配置iptables规则:需要在宿主机上配置iptables规则,以便将从ZeroTier网络接收到的数据包转发到局域网。

    PHY_IFACE=连接局域网的物理网卡; ZT_IFACE=XXXX
    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
    

    其中,PHY_IFACE是主机的物理网络接口,ZT_IFACE是ZeroTier创建的虚拟网络接口。

  3. 在ZeroTier网络中配置路由:在ZeroTier网络的管理界面中,需要添加一个路由,使得所有从ZeroTier网络收到的目标为局域网的数据包都会被发送到宿主机A。具体来说,需要将“Destination”设置为宿主机A在局域网内的IP地址(网段应根据实际情况填写),将“Via”设置为宿主机A在ZeroTier网络中的IP地址。

如何ZeroTier网络中配置路由

  1. 登录到ZeroTier的管理界面。
  2. 点击”Networks”选项。
  3. 网络设置页面中,找到”Managed Routes”部分。
  4. 在”Destination”字段中,输入您想要访问的网络的IP地址范围。例如,如果想要访问的网络的IP地址范围是192.168.1.0/24,那么就输入这个值。
  5. 在”Via”字段中,输入主机在ZeroTier网络中的IP地址。例如,如果主机在ZeroTier网络中的IP地址是10.0.0.1,那么就输入这个值。

解决方案

最终采用iptables,因为是vps,保险免得失联

如果是物理机,或者说是宿主机

直接用解决思路里的命令就行:

sudo apt update && sudo apt-get install procps iptables -y

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -p

ZT_IFACE=网络ID
sudo iptables -t nat -A POSTROUTING -o $ZT_IFACE -j MASQUERADE
sudo iptables -A FORWARD -i $ZT_IFACE -j ACCEPT

如果是docker

通过修改/proc/sys/net/ipv4/ip_forward文件来启用IP转发

  1. 在容器内部,运行以下命令来查看当前的IP转发状态:

    cat /proc/sys/net/ipv4/ip_forward
    

    如果文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开¹²。

  2. 如果IP转发功能未打开,您可以通过以下命令来启用它:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    这将把文件的内容由0修改为1,从而启用IP转发¹²。

然而,需要注意的是,这种修改只是临时的,当容器重启后,修改就会失效。如果您想要永久修改IP转发,需要修改/etc/sysctl.conf文件,并添加到末尾:

net.ipv4.ip_forward = 1

修改后,通过执行以下命令来使修改立即生效¹²:

sysctl -p /etc/sysctl.conf

这样,IP转发功能就会在容器启动时自动开启,最后运行物理机里面一样的步骤

对于windows:

没有具体测试:

安装ZeroTier客户端:在Windows系统中安装ZeroTier客户端,并加入到的ZeroTier网络。

配置网络共享:在Windows系统中,可以通过“网络和共享中心”来配置网络共享,使得从ZeroTier网络收到的数据包可以被转发到局域网。

配置静态路由:在Windows系统中,应该可以使用route命令来配置静态路由,使得所有从ZeroTier网络收到的目标为局域网的数据包都会被发送到Windows系统。


欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//