在 Ubuntu 上部署 docker 版 openwrt 旁路由并代理本机流量
本次 Ubuntu 版本如下,请注意时效性
1
2
3
4
5
6
| ***@***:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
|
一
下载 openwrt 镜像
这里推荐 immortalwrt
南京大学镜像
我使用的是 ImmortalWrt 23.05.3,x86/64
下载 rootfs.tar.gz 的文件,此处为
immortalwrt-23.05.3-x86-64-rootfs.tar.gz
1
| wget https://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/targets/x86/64/immortalwrt-23.05.3-x86-64-rootfs.tar.gz
|
使用gzip -d immortalwrt-23.05.3-x86-64-rootfs.tar.gz来解压
直接导入 docker
1
| docker import immortalwrt-23.05.3-x86-64-rootfs.tar immortalwrt:23.05.3
|
二
配置 macvlan 并执行 docker
我的环境是有一台192.168.1.1的路由器,这台机器 ip 为192.168.1.188,docker-openwrt 作为192.168.1.88的旁路由,网卡名为enp3s0
1
2
3
4
5
| ip link set enp3s0 promisc on
docker network create -d macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.88 -o parent=enp3s0 openwrtnet
docker run --restart always --name immortalwrt -d --network openwrtnet --ip 192.168.1.88 --privileged immortalwrt:23.05.3 /sbin/init
docker exec -it immortalwrt ash
vi /etc/config/network
|
修改config interface 'lan'的内容
例:
1
2
3
4
5
6
7
| config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.88'
option gateway '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
|
继续执行
1
| /etc/init.d/network restart
|
即可退出终端,打开浏览器
浏览器访问
http://192.168.1.88
输入root,password点登录
网络>接口>lan>编辑>
设备>eth0
DHCP 服务器>忽略此接口
(按需配置)高级设置>使用自定义的 DNS 服务器>223.5.5.5,1.1.1.1
保存
保存并应用
系统>软件包
因为这个版本的 openwrt 好像有 ssl 方面的 bug,所以我们先换不需要 https 的源,下好wget-ssl再换回来
配置 opkg
配置 opkg
/etc/opkg/distfeeds.conf 里面
替换为
1
2
3
4
5
6
| src/gz immortalwrt_core http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/packages
src/gz immortalwrt_base http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/base
src/gz immortalwrt_luci http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/luci
src/gz immortalwrt_packages http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/packages
src/gz immortalwrt_routing http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/routing
src/gz immortalwrt_telephony http://mirror.nju.edu.cn/immortalwrt/releases/23.05.3/packages/x86_64/telephony
|
保存
更新列表
下载并安装软件包,填入wget-ssl点确认
按提示完成安装
再次配置 opkg
填回
1
2
3
4
5
6
| src/gz immortalwrt_core https://mirrors.vsean.net/openwrt/releases/23.05.3/targets/x86/64/packages
src/gz immortalwrt_base https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base
src/gz immortalwrt_luci https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/luci
src/gz immortalwrt_packages https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/packages
src/gz immortalwrt_routing https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/routing
src/gz immortalwrt_telephony https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/telephony
|
更新列表
(可选)使用 openwrt
三
至此,你的手机就可以配置网关使其网络流量经过旁路由了,如果你就此结束,请自行持久化网卡混杂模式
恢复 rc.local
1
2
3
4
5
| cp /usr/lib/systemd/system/rc-local.service /etc/systemd/system/
touch /etc/rc.local
chmod 755 /etc/rc.local
echo '''#!/bin/bash''' >> /etc/rc.local
vi /etc/systemd/system/rc-local.service
|
在文件最底下加入
1
2
| [Install]
WantedBy=multi-user.target
|
然后
1
| systemctl enable rc-local.service
|
四
配置 Docker OpenWrt 与宿主机网络互通且作为宿主机网关
填入
1
2
3
4
5
6
| ip link set enp3s0 promisc on > /dev/null 2>&1
ip link add macvlan-proxy link enp3s0 type macvlan mode bridge
ip addr add 192.168.0.98 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 192.168.1.88 dev macvlan-proxy
route add default gw 192.168.1.88 macvlan-proxy
|
重启,
自行更改网关即可(比如使用 nmtui)
参考资料:
https://blog.simpdog.me/posts/using-docker-to-deploy-openwrt-as-a-home-router/
https://www.cnblogs.com/king-dom/p/17371747.html
https://blog.csdn.net/gongchenyu/article/details/134724333