ProxmoxVE 7.0 LXC下创建openwrt软路由

目录

一、创建容器

1. 下载模版

这里选择使用openwrt-21.02.0-rc3版本,rootfs包官方下载地址

2. 上传模板到PVE

ProxmoxVE 7.0 LXC下创建openwrt软路由

3. 新建LXC容器

通过SSH或者是网页端打开PVE终端,执行以下命令创建新容器

pct create 100 local:vztmpl/openwrt-21.02.0-rc3-x86-64-rootfs.tar.gz --rootfs local-lvm:4 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 2 --memory 2048 --swap 0 -net0 bridge=vmbr0,name=eth0
各参数说明:
vmid:100		
	容器编号,可以根据需要自行设置,这里设为100,后面的相关设置会用到该编号。
local:vztmpl/openwrt-21.02.0-rc3-x86-64-rootfs.tar.gz	
	容器模板, local:vztmpl/ 指向 /var/lib/vz/template/cache/目录,是pve的默认模板存放目录,webUI上传的模板就存在该位置,可根据需要改为其他目录,openwrt-21.02.0-rc3-x86-64-rootfs.tar.gz为模板文件名。
--rootfs local-lvm:4
	根磁盘位置,local-lvm可以根据实际情况修改为其他存储位置,4表示空间大小为4G。
--ostype unmanaged
	系统类型,之后可在设置文件中修改。
--hostname OpenWrt
	容器名称,之后可在设置文件中修改。
--arch amd64
	系统架构,amd64 | arm64 | armhf | i386。
--cores 2
	分配给容器的核心数。
--memory 2048
	分配给容器的内存大小,这里是2G。
--swap 0
	分配给容器的交换区大小,这里是0。
-net0 bridge=vmbr0,name=eth0
	容器网络设置,这里设置网络0为容器中增加网卡eth0,桥接到主机的vmbr0接口。

二、修改容器设置

1. 修改容器配置文件

vim /etc/pve/lxc/100.conf

添加以下内容

# openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置
lxc.include: /usr/share/lxc/config/openwrt.common.conf
# /dev/ppp  pppoe拨号等功能需要用到
lxc.cgroup.devices.allow: c 108:0 rwm
# 钩子脚本,用于添加 /dev/ppp等设备
hookscript: local:snippets/hookscript.pl
# 将主机的网卡enp4s0分配给容器使用,根据自己的实际情况更改
lxc.net.1.type: phys
lxc.net.1.link: enp4s0
lxc.net.1.flags: up

2. 创建钩子脚本

这里在官方示例guest-example-hookscript.pl的基础上进行修改,大家可以根据需要自行修改

mkdir /var/lib/vz/snippets
cp /usr/share/pve-docs/examples/guest-example-hookscript.pl /var/lib/vz/snippets/hookscript.pl
vim /var/lib/vz/snippets/hookscript.pl

在第36行可以找到以下内容

    # Second phase 'post-start' will be executed after the guest
    # successfully started.
   
    print "$vmid started successfully.\n";

修改为

    # Second phase 'post-start' will be executed after the guest
    # successfully started.
    system("lxc-device add -n $vmid /dev/ppp");
    system("lxc-device add -n $vmid /dev/net/tun");
    print "$vmid started successfully.\n";

三、启动容器

执行以下指令

pct start 100

由于PVE7.0 默认采用cgroupv2,缺少对系统类型为unmanaged的容器支持,会出现以下错误

run_buffer: 316 Script exited with status 1
lxc_init: 816 Failed to run lxc.hook.pre-start for container "100"
__lxc_start: 2007 Failed to initialize container "100"
startup for container '100' failed

解决方法是修改/usr/share/perl5/PVE/LXC/Setup.pm文件

vim /usr/share/perl5/PVE/LXC/Setup.pm

翻到最后,可以看到以下内容

sub unified_cgroupv2_support {
    my ($self) = @_;
    $self->protected_call(sub {
    $self->{plugin}->unified_cgroupv2_support();
    });
}

修改为

sub unified_cgroupv2_support {
    my ($self) = @_;
    return if !$self->{plugin}; # unmanaged
    $self->protected_call(sub {
    $self->{plugin}->unified_cgroupv2_support();
    });
}

继续执行pct start 100指令启动容器,会出现WARN: old systemd (< v232) detected, container won't run in a pure cgroupv2 environment! Please see documentation -> container -> cgroup version.警告,忽略就行。

如果还无法正常启动,可通过以下命令查看错误信息(日志保存于debug文件中)

lxc-start -n 100 --logfile debug --logpriority TRACE

四、OpenWrt基本设置

容器启动后,进入容器终端

lxc-attach 100

1.修改root密码

passwd

2.网络设置

vi /etc/config/network

修改如下内容(根据自己的实际情况更改)

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

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'

config interface 'wan'
        option device 'enp4s0'
        option proto 'pppoe'
        option username '1234567890'
        option password 'abcdefghijk'

重启网络和防火墙

/etc/init.d/network restart
/etc/init.d/firewall restart

● 现在你应该能够上网,并能通过https://192.168.1.1打开OpenWrt页面了

五、安装常用软件(根据个人喜好选择)

为了避免一些异常情况发生,修改/etc/hosts,添加以下内容

185.199.108.133 raw.githubusercontent.com
140.82.112.4 github.com

安装一些基本软件和中文语言包

opkg update
opkg install vim luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn luci-i18n-opkg-zh-cn

1、oh-my-zsh安装

来源:https://github.com/felix-fly/openwrt-ohmyzsh

安装依赖

opkg install unzip zsh ca-certificates

安装

sh -c "$(wget -O- https://raw.githubusercontent.com/felix-fly/openwrt-ohmyzsh/master/install.sh)"

设为默认shell

which zsh && sed -i -- 's:/bin/ash:'`which zsh`':g' /etc/passwd

不想用时可以卸载

sh -c "$(wget -O- https://raw.githubusercontent.com/felix-fly/openwrt-ohmyzsh/master/uninstall.sh)"

2、阿里云ddns安装设置

安装ddns中文包和依赖

opkg install luci-i18n-ddns-zh-cn wget-ssl openssl-util

下载 update_aliyun_com.sh脚本

wget -O /usr/lib/ddns/update_aliyun_com.sh https://raw.githubusercontent.com/sensec/ddns-scripts_aliyun/master/update_aliyun_com.sh

3、zerotier安装设置

安装zerotier软件包

opkg install zerotier

设置

uci set zerotier.sample_config.enabled='1'
# 0123456789ABCDE1替换成自己的网络ID
uci set zerotier.sample_config.join='0123456789ABCDE1'

启动zerotier

/etc/init.d/zerotier start

查看状态

zerotier-cli listnetworks

显示信息类似以下格式

200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 0123456789ABCDE1  XX:XX:XX:XX:XX:XX ACCESS_DENIED PRIVATE ztqu1d2mhx -

显示status状态是 ACCESS_DENIED,需要去ZeroTier Central设置通过。之后再执行zerotier-cli listnetworks显示status状态是OK就说明设置成功

修改防火墙设置

vim /etc/firewall.user

添加以下内容,其中ztxxxxxxxx更改为zerotier-cli listnetworks显示的dev项

iptables -I FORWARD -i ztxxxxxxxx -j ACCEPT
iptables -I FORWARD -o ztxxxxxxxx -j ACCEPT
iptables -t nat -I POSTROUTING -o ztxxxxxxxx -j MASQUERADE

重启防火墙

/etc/init.d/firewall restart

4、Server酱安装设置

使用说明:https://github.com/tty228/luci-app-serverchan/

安装依赖,因为作者没有把luci-compat加进依赖库,需要手动安装(已安装的可忽略,比如安装dockerman的时候会自动安装luci-compat)

opkg install luci-compat

下载安装软件包

wget https://github.com/tty228/luci-app-serverchan/releases/download/v1.86/luci-app-serverchan_1.86-9_all.ipk
opkg install luci-app-serverchan_1.86-9_all.ipk

设置
ProxmoxVE 7.0 LXC下创建openwrt软路由

按照提示和格式要求填写“企业微信凭证”
Server酱官方配置说明文档点击这里
ProxmoxVE 7.0 LXC下创建openwrt软路由
设置好以后,点击“定时推送”–>“发送”
ProxmoxVE 7.0 LXC下创建openwrt软路由
可以收到下图格式的信息
ProxmoxVE 7.0 LXC下创建openwrt软路由
其他设置可以自行摸索

上一篇:gnuplot输出柱状图


下一篇:将Python函数传递给Gnuplot