在Ubuntu上部署docker版openwrt旁路由并代理本机流量

在 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

1
sudo su -

下载 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
输入rootpassword点登录
网络>接口>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
vi /etc/rc.local

填入

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

使用 Hugo 构建
主题 StackJimmy 设计