前言
出门在外,总是想携带一个路由器/树莓派什么的当软路由使用。其实Linux本身自己开个容器,照样能达到一样的效果。携带个笔记本就相当于内置了一个软路由了,少带一样东西多舒服。还能使用各种openwrt插件。
网络路径如下所示:
graph TD
A[物理网卡
ens7p3]
B{Openwrt容器}
C[电脑连接互联网
bridge0
静态IP 192.168.254.2
网关&DNS 192.168.254.1]
A -- MACVLAN(eth0 WAN)
DHCP --> B
B -- 网桥(eth1 LAN)
静态IP 192.168.254.1 --> C
设置容器
安装LXC
首先安装lxc。
sudo apt install lxc lxcfs
这个教程针对的是桌面系统,lxc内置的这个网桥没啥用,直接禁用就好。
sudo systemctl disable --now lxc-net.service
创建Host Only网桥
接下来创建一个Host Only网桥,这个网桥仅作为电脑和LXC内沟通的唯一通道,也是电脑连接互联网的通道。

这里首先关闭自动连接,因为网桥需要先于容器连接,有着启动时序要求。

记住这个连接名称和接口名称,后面是需要用上的。

转到IPv4设置,设置静态的手动连接。

转到IPv6设置,直接禁用掉。

安装和配置Openwrt
开始对容器进行安装。
sudo lxc-create -t download internal-openwrt -- --dist openwrt --release 24.10 --arch amd64
安装好容器后别着急启动,这里先编辑它的配置文件。
首先编辑 /var/lib/lxc/internal-openwrt/config
将 # Network configuration 后面的内容改成如下的样子
# ... 省略上面的内容 ...
# Network configuration
# 容器内的eth0端口,这个接口为WAN接口,
# 这里假设宿主机电脑物理网卡插入网线的端口是ens7p3
lxc.net.0.type = macvlan
lxc.net.0.link = ens7p3
lxc.net.0.flags = up
lxc.net.0.macvlan.mode = bridge
# 容器内的eth1端口,这个接口为LAN接口,
# 这个接口连接到刚才创建的Host Only内部网桥
lxc.net.1.type = veth
lxc.net.1.link = bridge0
lxc.net.1.flags = up
# 透传Tun设备,这样可以使用某些软件 ...
lxc.cgroup2.devices.allow = c 10:200 rwm
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
然后再编辑 /var/lib/lxc/internal-openwrt/rootfs/etc/config/network
编辑为如下所示的内容。
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'
config interface 'wan6'
option ifname 'eth0'
option proto 'dhcpv6'
config interface 'lan'
option device 'eth1'
option proto 'static'
option ipaddr '192.168.254.1'
option netmask '255.255.255.0'
option delegate '0'
option metric '0'
config globals 'globals'
option ula_prefix 'auto'
手动启动容器,开始使用
现在可以启动容器了。可以开始体验了。
请先断开电脑的互联网连接,逼迫电脑从内部的openwrt容器连接互联网。(不是让你直接给网线拔掉惹)。
# 启动网桥和容器
nmcli connection up 网桥连接\ 1
sudo lxc-start internal-openwrt
稍等一会,openwrt没有启动这么快。
此时打开 http://192.168.254.1 即可看到openwrt的控制台。
请尽情享受openwrt吧。

不想使用了的时候可以用下面的指令关闭容器。
# 停止网桥和容器
sudo lxc-stop internal-openwrt
nmcli connection down 网桥连接\ 1
Q&A
主播主播,我想开机启动。
因为容器依赖网桥,所以对启动时序有要求。
可以安装这个systemd服务文件实现开机自动启动。
[Unit]
Description=Bridge Network with Internal Openwrt Container
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/nmcli connection up "网桥连接 1"
ExecStart=/usr/bin/lxc-start internal-openwrt
ExecStop=/usr/bin/lxc-stop internal-openwrt
ExecStop=/usr/bin/nmcli connection down "网桥连接 1"
[Install]
WantedBy=multi-user.target
主播主播,同时连接网络和网桥会影响电脑上网吗?
不建议,如果真的想同时连接,你可以把网络的优先级改成999,让电脑优先使用网桥上网。
主播主播,怎么共享给别的设备喵?
可以开热点,或者使用以太网共享。
主播主播,能当旁路由吗?
可以的,在openwrt新建一个接口,协议选静态ip,自己编辑一个不和外部网络冲突的内网ip,设备选择eth0即可,防火墙区域选择LAN,注意不要开启DHCP。此时手机等其他设备设置网关ip为刚才设置的这个ip即可通过这个电脑内部的openwrt上网。
graph TD
A[物理网卡
ens7p3]
B{Openwrt容器}
C[电脑连接互联网
bridge0
静态IP 192.168.254.2
网关&DNS 192.168.254.1]
D[物理网卡:其他局域网设备
ens7p3
静态IP 192.168.253.*
网关&DNS 192.168.253.1]
A -- MACVLAN(eth0 WAN)
DHCP --> B
B -- 网桥(eth1 LAN)
静态IP 192.168.254.1 --> C
B -- MACVLAN(eth0 LAN)
静态IP 192.168.253.1 --> D
Comments 2 条评论
😋
@粉毛雪貂 😘