ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ProxmoxVE 7.0 LXC下创建openwrt软路由

2021-07-29 16:31:19  阅读:3323  来源: 互联网

标签:容器 ProxmoxVE -- 7.0 LXC 设置 lxc 100 安装


目录

一、创建容器

1. 下载模版

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

2. 上传模板到PVE

在这里插入图片描述

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

设置
在这里插入图片描述

按照提示和格式要求填写“企业微信凭证”
Server酱官方配置说明文档点击这里
在这里插入图片描述
设置好以后,点击“定时推送”–>“发送”
在这里插入图片描述
可以收到下图格式的信息
在这里插入图片描述
其他设置可以自行摸索

标签:容器,ProxmoxVE,--,7.0,LXC,设置,lxc,100,安装
来源: https://blog.csdn.net/kangzeru/article/details/115373587

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有