最近被备案搞的烦,本来是凉心云的备案,解析到套路云一直被拦截,而且是机房层面的拦截,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容器具有足够的权限和正确的网络设置。
- 使用与Docker主机相同的网络:在创建Docker容器时,可以选择使用与Docker主机相同的网络。这将允许容器直接访问主机网络,从而实现与主机的通信。
- 使用高权限执行容器:在创建Docker容器时,确保选中“使用高权限执行容器”选项。这将赋予容器更多的权限,使其能够访问主机的网络接口。
- 启用自动重新启动:在高级设置中,启用“自动重新启动”选项。这将确保在容器出现问题时能够自动重启,从而保持与主机的连接。
配置ZeroTier~~~~:在容器内部,需运行~~~~`zerotier-cli joincompose已经设定了`~~~~命令来加入ZeroTier网络²。然后,您需要在ZeroTier的Web界面中授权新的成员。 - 检查连接:最后容器内部运行
zerotier-cli peers
命令来检查连接状态。
到现在已经能访问到宿主机了,但是跟宿主机同一局域网的机器访问不到
思路:其实就是路由的问题,如果是在软路由上肯定没这个问题
启用IP转发:在宿主机A上,需要启用IP转发。
sudo sysctl -w net.ipv4.ip_forward=1 sudo sysctl -p
配置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创建的虚拟网络接口。在ZeroTier网络中配置路由:在ZeroTier网络的管理界面中,需要添加一个路由,使得所有从ZeroTier网络收到的目标为局域网的数据包都会被发送到宿主机A。具体来说,需要将“Destination”设置为宿主机A在局域网内的IP地址(网段应根据实际情况填写),将“Via”设置为宿主机A在ZeroTier网络中的IP地址。
如何ZeroTier网络中配置路由
- 登录到ZeroTier的管理界面。
- 点击”Networks”选项。
- 网络设置页面中,找到”Managed Routes”部分。
- 在”Destination”字段中,输入您想要访问的网络的IP地址范围。例如,如果想要访问的网络的IP地址范围是192.168.1.0/24,那么就输入这个值。
- 在”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转发
在容器内部,运行以下命令来查看当前的IP转发状态:
cat /proc/sys/net/ipv4/ip_forward
如果文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开¹²。
如果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系统。
欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。