Atlantis
GitHub 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

9. 使用OpenWrt作为网关

Created At 2024-10-25 Updated on 2025-10-25

1. 前言

在购入 T68M 做软路由后(莱因特T68M软路由),网络和存储从 PVE 分离出,这样就不用担心 PVE 关机或者故障导致家庭网络崩溃。

有了外部软路由后,就可以继续模仿云上 VPC 的结构,可以利用网桥创建多个子网,为虚拟机和容器配置双网卡,以及测试一些跨子网的应用场景。

这里使用 OpenWrt 接入网桥作为子网网关,同时它也是一个路由器,于是网络结构变更如下:

flowchart LR
    M[光猫<br>192.168.1.1/24]
    subgraph iStoreOS
        IWAN[WAN<br>192.168.1.3/24]
        ILAN[LAN<br>192.168.123.1/24]
    end
    subgraph Proxmox
        eth0[eth0<br>192.168.1.2/24]
        vmbr0[vmbr0<br>192.168.123.2/24]
        vmbr1[vmbr1]
        subgraph OpenWrt
            OWAN[WAN<br>192.168.123.x/24]
            OLAN[LAN<br>172.31.255.1/24]
        end
        subgraph 虚拟机
            KWAN[eth0<br>192.168.123.x/24]
            KLAN[eth1<br>172.31.255.x/24]
        end
        subgraph 容器
            LWAN[eth0<br>172.31.255.x/24]
        end
    end
    IWAN ---> M
    eth0 ---> M
    vmbr0 ---> ILAN
    OWAN ---> vmbr0
    vmbr1 ---> OLAN
    KWAN ---> vmbr0
    KLAN ---> vmbr1
    LWAN ---> vmbr1
    classDef myClass fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff
    class openwrt,虚拟机,容器 myClass

下面使用两种方式在 PVE 上创建 OpenWrt:KVM 虚拟机和 LXC 容器。

2. 创建OpenWrt虚拟机

首先下载虚拟机镜像,访问 https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/ 查看镜像列表,这里选择下载非 UEFI 启动的镜像压缩包,如下:

wget -c https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.5-x86-64-generic-ext4-combined.img.gz
gunzip openwrt-23.05.5-x86-64-generic-ext4-combined.img.gz

解压得到 img 文件 openwrt-23.05.5-x86-64-generic-ext4-combined.img

然后创建一个不带硬盘的虚拟机,并添加 eth0 网卡接入 vmbr0,eth1 网卡接入 vmbr1,如下:

alt text

这里虚拟机的 ID 为 104,下面为它导入磁盘文件:

➜  ~ qm disk import 104 /root/openwrt-23.05.5-x86-64-generic-ext4-combined.img intel
importing disk '/root/openwrt-23.05.5-x86-64-generic-ext4-combined.img' to VM 104 ...
Formatting '/mnt/intel/images/104/vm-104-disk-0.raw', fmt=raw size=126353408 preallocation=off
transferred 0.0 B of 120.5 MiB (0.00%)
...
transferred 120.5 MiB of 120.5 MiB (100.00%)
transferred 120.5 MiB of 120.5 MiB (100.00%)
Successfully imported disk as 'unused0:intel:104/vm-104-disk-0.raw'

然后将该磁盘挂载到 SCSI 总线,并设置为可引导:

alt text

alt text

开机后即可通过终端登录到系统内,此时 eth0 会默认使用 DHCP 获取到 WAN 地址,我们稍后再做配置。

3. 创建OpenWrt容器

OpenWrt 的 LXC 容器镜像可以在 linuxcontainers 网站上下载,访问 https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/ 获取最新日期的根目录文件压缩包,我们下载 root.tar.xz 即可,如下:

wget -c https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/20241031_11%3A57/rootfs.tar.xz

然后使用 pct 命令手动创建一个 LXC 容器,如下:

pct create 1149 /root/root.tar.xz --arch amd64 --hostname vmbr1 --rootfs intel:1 --memory 1024 --swap 0 --cores 1 --ostype unmanaged --unprivileged 1

创建成功后在控制台上可以看到对应的 LXC 容器,我们再为它手动添加两个网卡,分别接入 vmbr0 与 vmbr1:

alt text

alt text

启动容器后即可登录控制台修改配置。

4. 修改OpenWrt配置

我们的预期如下:

  1. eth0 设备绑定静态 IPv4 地址,并通过 DHCPv6 获取 IPv6 地址,充当公网网卡,日常维护直接访问 eth0 的 IP 即可
  2. eth1 按需配置子网网段和网关 IP,接入子网的设备都可以分配到内网地址
  3. eth0 和 eth1 开启 IPv6 中继,直接从上级网关(iStoreOS)获取 IPv6 地址

首先通过 PVE 控制台登录 OpenWrt,配置网络与防火墙,如下:

root@vmbr1:~# cat /etc/config/network 

config interface 'loopback'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'
        option device 'lo'

config interface 'wan'
        option proto 'static'
        option device 'eth0'
        option ipaddr '192.168.123.149'
        option netmask '255.255.255.0'
        option gateway '192.168.123.1'
        option broadcast '192.168.123.255'

config interface 'wan6'
        option proto 'dhcpv6'
        option device 'eth0'
        option reqaddress 'try'
        option reqprefix 'auto'

config device
        option type 'bridge'
        option name 'lan'
        list ports 'eht1'

config interface 'lan'
        option proto 'static'
        option device 'lan'
        option ipaddr '172.31.255.1'
        option netmask '255.255.255.0'

上述配置文件做了以下修改:

  1. 设置两个接口 wan 和 wan6 使用 eth0 设备,wan 配置静态 IPv4 地址,wan6 配置通过 DHCPv6 获取 IPv6 地址
  2. 使用 eth1 网卡创建了一个网桥设备 lan,然后再创建一个 lan 接口使用 lan 网桥

执行 service network restart 可以应用修改。

接下来需要修改防火墙,这里使用 uci 命令配置防火墙,允许 wan 入向请求,这样我们就可以访问 wan 的 IPv4 地址在网页上配置 OpenWrt,如下:

uci set firewall.@zone[1].input="ACCEPT"
uci commit firewall
service firewall restart

可以访问 192.168.123.149 完成后续配置,比如安装汉化包、配置 DHCP 服务器、设置 IPv6 中继、配置防火墙等,具体操作不再赘述,截图如下:

检查 LAN 是否开启 DHCP

alt text

配置 LAN 开启 IPv6 中继

alt text

对应的 /etc/config/dhcp 配置如下:

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv4 'server'
        option dhcpv6 'relay'
        option ra 'relay'
        option ndp 'relay'

配置 WAN6 开启 IPv6 中继

alt text

对应的 /etc/config/dhcp 配置如下:

config dhcp 'wan6'
        option interface 'wan6'
        option ignore '1'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'
        option master '1'

检查防火墙配置

alt text