|
本帖最后由 lothario 于 2021-8-31 14:43 编辑
鉴于没几个帖子看到有人尝试用单网口机器安装docker 做主路由的教程.
于是把自己最近踩的坑做一个总结, 顺带有其他的朋友想参考的可以有个参照.
前置条件
1> 有个单网口的机器x86/arm 都可以吧.
2> 安装合适的linux os(debian/centos/ubuntu)
3> 在os 上安装docker. 可参照如下docker 官网.
https://docs.docker.com/engine/install/
4> 编译/找大佬要一个docker 版本的 openwrt. 我是自己编译的. 这里感谢lean/esir 等大佬的连接和教程.
如果有人需要编译的详细教程. 可以后续再出...
https://github.com/coolsnowwolf/lede
配置网络:
1> 光猫接路由器lan口
2> 单网口机器接路由器lan口.
然后是选择docker 的网络, 由于需要在局域网二层内可发现且需要设置独立的ip
所以选择docker 在2层网络下的 macvlan/ipvlan 这里用macvlan 来举例.
macvlan 也有局限:
1> 不能和host machine 网络互通. 具体原因可以参考如下链接, 有兴趣的同学可以自行查看.
https://zhuanlan.zhihu.com/p/67384482
https://blog.csdn.net/dog250/article/details/45788279
2> 不能assign gateway ip 到container, 这点就限制了我们使用container进行拨号的想法, 但是可以通过如下WA 解决.
https://github.com/moby/libnetwork/issues/1447
接下来开始正式的配置:
开启网络接口混杂模式(我没有开启也ok, 不晓得为什么)
sudo ip link set eth0 promisc on
创建网络
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.100 \
--aux-address "ct=192.168.1.1" \
--aux-address "router=192.168.1.2" \
--aux-address "host=192.168.1.3" \
-o macvlan_mode=bridge \
-o parent=vmbr0 \
mv
加载OP 的 docker image, 默认生成latest 的tag 也可以自定义为日期的tag
docker import openwrt*.tar.gz openwrt
运行container
docker run -itd -P --privileged \
--name op \
--hostname openwrt \
--network mv \
--cap-add NET_ADMIN \
openwrt /sbin/init
进入container 内部手动修改ip & /etc/resolv.conf
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
将nameserver 从127.0.0.11 修改为127.0.0.1
/ # nslookup www.baidu.com
nslookup: write to '127.0.0.11': Connection refused
;; connection timed out; no servers could be reached
最后通过任意连接路由器的机器打开http://192.168.1.100 开启配置op.
资源消耗非常低. 我跑300M 11年前的笔记本才占7% 的cpu.
在mv 网络上创建的其他container 都以op 为gateway(网络出口), 效率还是蛮高的.
加一个adguardhome 的启动, 这样可以把op 的dns解析放在adh 上面. 也还可以.
docker run -dit -P \
--name adh \
--hostname adguardhome\
--network mv --ip 192.168.1.9 \
--restart unless-stopped\
-v /etc/adh/work:/opt/adguardhome/work\
-v /etc/adh/conf:/opt/adguardhome/conf\
adguard/adguardhome
|
|