概述:
OpenWRT 通过 docker 安装在192.168.1.10上,OpenWRT 中启用 Zerotier,并配置 Zerotier 网络中可以访问内网192.168.1.x的路由
步骤:
-
宿主机192.168.1.10上安装docker(略)
-
宿主机192.168.1.10上查看ip地址对应的网卡为enp1s0,执行下面命令对网卡设置混杂模式
ip link set enp1s0 promisc on
- 创建虚拟网络macvlan
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp1s0 macnet
-
拉取openwrt镜像并启动
docker run --restart always --name openwrt -d --network macnet --privileged --ip 192.168.1.249 registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64 /sbin/init
-
查看openwrt的容器id
-
执行以下命令进入openwrt容器
docker exec -it 49e5290e0450 bash
- 编辑/etc/config/network文件做如下修改:
这里设置了容器ip为192.168.1.249,与宿主机192.168.1.10在同一网段
- 重启网络
/etc/init.d/network restart
-
此时openwrt容器中可以ping通其它 192.168.1.x段的地址,但ping不通宿主机192.168.1.10的地址。执行exit退出容器
-
在宿主机192.168.1.10上做如下设置:
ip link add macvlan-proxy link enp1s0 type macvlan mode bridge
ip addr add 192.168.1.251 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 192.168.1.249 dev macvlan-proxy
**之后宿主机和容器之间可以互相ping通**
- 打开浏览器进入http://192.168.1.249 输入账号密码,进入openwrt设置界面,点 VPN -> ZeroTier
选中“启用”、“自动允许客户端NAT”,在 ZeroTier Network ID框中输入要加入的zerotier网络id,然后点 “保存&应用”
-
登录zerotier,对刚才接入的openwrt中的zerotier客户端添加许可。之后设置所有到192.168.1.x的访问路由到openwrt的zerotier客户端ip。此时可以尝试在另外的zerotier客户端上访问192.168.1.x地址。
-
如果不通,还需要做如下设置:点 网络->防火墙
将 “转发”设为 “接受”
区域中做如上图的设置,IP动态伪装和MSS钳制保持不选。之后点 “保存&应用”。
再去防火墙->自定义规则页面,输入下面三条,然后点“重启防火墙”
iptables -I FORWARD -i ztc3qwyx5l -j ACCEPT
iptables -I FORWARD -o ztc3qwyx5l -j ACCEPT
iptables -t nat -I POSTROUTING -o ztc3qwyx5l -j MASQUERADE
其中ztc3qwyx5l是zerotier虚拟接口的名字,在容器的命令行下用ifconfig命令可以看到