基于Proxmox VE 7.4

本文主要根据:ProxmoxVE 7.0 LXC下搭建openwrt软路由,完成配置

创建 OpenWrt 容器主要用作旁路由,使用虚拟网卡,所以其它的用不到的部分没有设置

下载

下载需要使用文件名为 rootfs.tar.gz 的镜像

提供两个官方的镜像(注意,目前immortalwrt镜像版本是21.02,使用的是iptables,启动防火墙的时候和PVE宿主机有兼容性的问题,会导致lan口无妨正常访问,重启防火墙可以解决fw3 reload,或者尝试更换使用nftables 的固件)

可以在 local—>CT模板—>从URL 下载,直接下载到PVE上(下载很慢,也可以下载完后上传上去)

创建LXC

我只分配了一个网口,当作旁路由来用,下面的配置 OpenWrt 也是针对旁路由来配置的

按自己条件修改一下命令,然后在PVE中执行命令即可

1
2
3
4
5
6
7
8
9
10
11
12
pct create 100 \
local:vztmpl/immortalwrt-21.02.6-x86-64-rootfs.tar.gz \
--rootfs local-lvm:2 \
--ostype unmanaged \
--hostname OpenWrt \
--arch amd64 \
--cores 4 \
--features nesting=1 \
--memory 1024 \
--swap 0 \
--unprivileged 1 \
-net0 bridge=vmbr0,name=eth0,gw=192.168.31.1,ip=192.168.31.2/24
  • pct create 100:LXC容器的ID,我设置的100
  • local:vztmpl/ 下载或者自己上传的储存路径就在这里,不需要改动,只需要修改后面的文件名,记得带文件扩展名 .gz
  • --rootfs local-lvm:2:根磁盘2G大小,磁盘位置: local-lvm 默认不需要改动
  • --ostype unmanaged:系统类型,不需要改动
  • --hostname OpenWrt :容器名OpenWrt,可以自己命名
  • --arch amd64:系统架构,x86设备默认amd64
  • --cores 4:核心数,我直接分配了4个核心
  • nesting=1:开启嵌套
  • --memory 1024 :分配1G内存
  • --swap 0:不分配swap
  • unprivileged 1:使用无特权的容器
  • -net0 bridge=vmbr0,name=eth0 :网络配置,为OpenWrt增加网卡eth0,桥接到主机的vmbr0接口(实际这里的网络配置并不起作用,起作用的还是进入openwrt系统后的配置)
    • gw=192.168.31.1,ip=192.168.31.2/24:修改网关gw为自己的路由器IP,ip自己设置一个没有被占用的IP

创建好之后编辑配置文件

1
vim /etc/pve/lxc/100.conf

新增一行

1
lxc.include: /usr/share/lxc/config/openwrt.common.conf

因为像 ZeroTierTailscale 等内网穿透工具,需要用到 /dev/tun 设备,所以如果有需要

查看设备号

1
ls -l /dev/net/tun

一般都是

root@pve:~# ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 May 1 01:16 /dev/net/tun

所以在配置文件中新增两行

1
2
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

同理,如果想使用openwrt拨号,需要用到 /dev/ppp 设备

1
ls -l /dev/ppp

一般都是

root@pve:~# ls -l /dev/ppp
crw——- 1 root root 108, 0 May 1 01:16 /dev/pp

所以在配置文件中新增两行

1
2
lxc.cgroup2.devices.allow: c 108:0 rwm 
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file

配置 OpenWrt

下面的配置是针对旁路由来配置,那些需要使用旁路由的设备手动设置网关到旁路由

LXC 容器创建完成之后,直接启动容器

进入控制台,修改一下 lan 口的 ipaddr

1
vim /etc/config/network

默认的是192.168.1.1,给它修改为上面创建时候配置的 192.168.2.2

1
2
3
4
5
6
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'

在最后再加上DNS和网关的配置,DNS用的阿里云,网关就是路由器IP

配置好以后的

1
2
3
4
5
6
7
8
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.2.2'
option netmask '255.255.255.0'
option ip6assign '60'
list dns '223.5.5.5'
option gateway '192.168.2.1'

重启网络服务

1
service network restart

访问OpenWrt后台:http://192.168.2.2

immortalwrt的默认密码为空,直接登录即可,这时候的OpenWrt应该已经可以正常访问外网了

网页上的一些配置

主要就是设置LAN接口

在网络—>接口

编辑,将设备那里从默认的桥接”br-lan“改为”eth0(lan)“(因为就分配了一个网口,我觉得没必要使用桥接)

关闭DHCP服务

问题解决

这时候用作旁路由,我出现了下载速度慢,上传速度慢的问题,或者干脆不能上网(如果没有遇到问题的话,不需要管这部分)

在PVE的OpenWrt控制台,修改防火墙(或者在 网络—>防火墙—>自定义规则 里面添加)

1
vim /etc/firewall.user

加入以下配置(eth0就是创建LXC容器时候最后设置的name=eth0)

1
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

关闭 启用 SYN-flood 防御 (在 网络—>防火墙—>常规设置 里面)

重启防火墙

1
service firewall restart

关于这条命令

大意就是做了nat转换,上网数据全部过了一次旁路由,和外界交互全部是旁路由在进行,而不是你的设备

如果不想使用这条命令,在网络—>接口,那里添加一个wan口,使用DHCP协议,网卡选择和lan口一样的eth0即可

此时wan口和lan口共用eth0,wan口发出数据时,会自动做SNAT,一样是做了nat转换

当然如果不想设置nat转换规则,主路由性能足够的话,关闭硬件nat,启用shortcut-fe 加速,也可以解决下载速度慢,上传速度慢的问题

如果是小米路由器或者其他品牌路由器,也可以尝试在 DHCP服务 那里设置非旁路网关的DNS

其它设备的设置

修改一下网关和DNS服务器就可以了

如果路由器有使用 dnsmasq,也可以在 dnsmasq 加入配置,指定mac地址使用指定的网关和DNS

1
2
3
4
5
6
# 设置一个标签OpenWrt,为标签的网关设置为192.168.2.2
dhcp-option=tag:OpenWrt,option:router,192.168.2.2
# 设置一个标签OpenWrt,,为标签的的DNS服务器设置为192.168.2.2
dhcp-option=tag:OpenWrt,option:dns-server,192.168.2.2
# 配置dhcp服务,指定mac地址使用这个标签
dhcp-host = AA:BB:CC:DD:EE:FF,set:OpenWrt