本次实验通过 Mikrotik RouterOS 实现单线双拨,以及将这两条拨号线路实现负载均衡,底下接入一台 Windows 做最后的带宽测试。
单线多播的几个前提条件,一是需要看各地区运营商的支持情况,一般能支持2-3拨;二是需要有独立的MAC地址。我们能够做的就是首先满足第二个条件。根据以往的经验,将端口加入到 bridge 就可以更改 MAC 地址,但是一个端口只能对应一个 bridge,也就是说只能单线单播或多线多拨,特别适用于某些运营商绑定了特定 MAC 地址拨号的情况。
这里用到了 VRRP (Virtual Router Redundancy Protocol)协议,但目的只是为了通过它获取到多个独立的 MAC 地址。至于它的 IP 地址可以随便设置,不重复就行了,不设置 IP 地址的话接口无法使用。由于它自己生成的 MAC 地址总是相同的,非常有可能与运营商底下的其他接入线路重复,导致拨号失败。因此,需要将 VRRP 接口都加入到 bridge,通过它提供的 firewall 做 MAC 地址映射,达到自定义拨号线路 MAC 地址的目的。
命令实现
add name=bridge1/interface vrrpadd interface=bridge1 name=vrrp1add interface=bridge1 name=vrrp2 vrid=2/interface pppoe-clientadd disabled=no interface=vrrp1 name=pppoe-out1 password=pppoetest01 user=\ pppoetest01@livejq.topadd disabled=no interface=vrrp2 name=pppoe-out2 password=pppoetest01 user=\ pppoetest01@livejq.top/interface bridge natadd action=dst-nat chain=dstnat dst-mac-address=\ 50:2C:E8:00:14:06/FF:FF:FF:FF:FF:FF to-dst-mac-address=00:00:5E:00:01:01add action=src-nat chain=srcnat src-mac-address=\ 00:00:5E:00:01:01/FF:FF:FF:FF:FF:FF to-src-mac-address=50:2C:E8:00:14:06add action=dst-nat chain=dstnat dst-mac-address=\ 50:2C:E8:00:14:07/FF:FF:FF:FF:FF:FF to-dst-mac-address=00:00:5E:00:01:02add action=src-nat chain=srcnat src-mac-address=\ 00:00:5E:00:01:02/FF:FF:FF:FF:FF:FF to-src-mac-address=50:2C:E8:00:14:07/interface bridge portadd bridge=bridge1 interface=ether1/interface bridge settingsset use-ip-firewall=yes/ip addressadd address=192.168.1.1/24 interface=ether2 network=192.168.1.0add address=172.16.0.254/24 interface=bridge1 network=172.16.0.0add address=172.17.0.254/24 interface=vrrp1 network=172.17.0.0add address=172.18.0.254/24 interface=vrrp2 network=172.18.0.0
这里的 ether1 是 WAN 拨号接口,ether2 是 LAN 口,接的是一台 Windows 测试机,内网网段设为 192.168.1.0/24,网关 192.168.1.1。
这里顺便设置了两条拨号线路的带宽分别为 5M(只要不超过你向运营商购买的最大带宽就可以了,我这里设置小点比较容易看出效果),方便后面负载均衡的验收测试。
命令实现
/ip pooladd name=pool1 ranges=192.168.1.100-192.168.1.200/ip dhcp-serveradd add-arp=yes address-pool=pool1 always-broadcast=yes disabled=no \ interface=ether2 name=server1/ip dhcp-server networkadd address=192.168.1.0/24 dns-server=192.168.1.1 gateway=192.168.1.1/ip dnsset allow-remote-requests=yes servers=223.6.6.6/queue simpleadd max-limit=5M/5M name=queue1 target=pppoe-out1add max-limit=5M/5M name=queue2 target=pppoe-out2
每条线路对应一个 input 标记连接、一个 output 标记路由,还有两个 prerouting 分别标记连接与标记路由。both-addresses:2/0
其中的 both-addresses 表示取目标 IP 和源 IP 的哈希值,2 表示 2 条线路,0 表示哈希值除于 2 的余数为 0 标记为第一条,余数为 1 标记为第二条,以此类推,除数值随线路数一起改变。
命令实现
/ip firewall mangleadd action=mark-connection chain=prerouting comment=PCC1 dst-address-type=\ !local new-connection-mark=PCC1 passthrough=yes \ per-connection-classifier=both-addresses:2/0 src-address=192.168.1.0/24add action=mark-routing chain=prerouting connection-mark=PCC1 \ new-routing-mark=R1 passthrough=yes src-address=192.168.1.0/24add action=mark-connection chain=input in-interface=pppoe-out1 \ new-connection-mark=PCC1 passthrough=yesadd action=mark-routing chain=output connection-mark=PCC1 new-routing-mark=R1 \ passthrough=yesadd action=mark-connection chain=prerouting comment=PCC2 dst-address-type=\ !local new-connection-mark=PCC2 passthrough=yes \ per-connection-classifier=both-addresses:2/1 src-address=192.168.1.0/24add action=mark-routing chain=prerouting connection-mark=PCC2 \ new-routing-mark=R2 passthrough=yes src-address=192.168.1.0/24add action=mark-connection chain=input in-interface=pppoe-out2 \ new-connection-mark=PCC2 passthrough=yesadd action=mark-routing chain=output connection-mark=PCC2 new-routing-mark=R2 \ passthrough=yes/ip firewall natadd action=masquerade chain=srcnat out-interface=pppoe-out1add action=masquerade chain=srcnat out-interface=pppoe-out2/ip routeadd distance=1 gateway=pppoe-out1 routing-mark=R1add distance=1 gateway=pppoe-out2 routing-mark=R2add comment="\C4\AC\C8\CF\CD\F8\B9\D8" distance=1 gateway=pppoe-out1add comment="\B1\B8\D3\C3\C4\AC\C8\CF\CD\F8\B9\D8" distance=2 gateway=\ pppoe-out2
这里将两条线路分别设置成 5M 带宽,由下图可以看出,在 Windows 带宽测试中是能够正常跑满两条线路的总带宽的,由此证明两条线路的负载均衡设置生效了。
]]>实验环境:Ubuntu 20.04
apt install ppp
apt install -y libc6-dev
wget -c https://src.fedoraproject.org/repo/pkgs/rp-pppoe/rp-pppoe-3.15.tar.gz/sha512/a156c084e57361ab6a464c3205ffb85cf86d02f71f17f92c9567f1ab0ed300f10030832fd232084699dc842ac4891efc8c54c8165587bfc7b4c92724318a60d9/rp-pppoe-3.15.tar.gztar zxf rp-pppoe-3.15.tar.gz -C /optchown -R root:root /opt/rp-pppoe-3.15/opt/rp-pppoe-3.15/go
如果是部署的服务端,可以一路回车,毕竟用不到这个配置。
配置保存在/etc/ppp/pppoe.conf
,此配置文件是 pppoe-start 命令默认读取的配置文件,作为 PPPOE Client 客户端另行配置使用,因此需要在另一台设备再部署一次 rp-pppoe 作为客户端,然后连接到服务端的以太网口才能进行拨号测试。但是需要注意的是,这里使用 Mikrotik RouterOS 作为客户端进行测试,更贴近实际生产环境的使用情况,以下仅介绍服务端的配置。
如果出现no acceptable C compiler found in $PATH
apt install -y gcc
如果出现make not found
apt install -y make
账号密码保存在/etc/ppp/chap-secrets
,需要在最后加上*
表示允许所有来源 IP 连接。
# client server secret IP addresses pppoetest01@livejq.top * "pppoetest01" *
ppp 全局配置文件/etc/ppp/options
,以下列出的修改成相同,其他默认。
local#modem-pap+chapproxyarp
pppoe 全局配置文件/etc/ppp/pppoe-server-options
#require-paprequire-chap#loginauth
启用转发
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf && sysctl -p
开启地址转换
iptables -A POSTROUTING -t nat -s 192.168.123.0/24 -j MASQUERADE
pppoe-server -I ens3 -L 192.168.123.254 -R 192.168.123.50 -N 20
最后连接拨号测试,可以正常上网。
]]>静态网络示例,编辑/etc/network/interfaces
auto 网卡名iface 网卡名 inet staticaddress 10.10.20.22gateway 10.10.20.254netmask 255.0.0.0dns-nameserver 223.6.6.6#dns-nameservers 223.6.6.6 114.114.114.114
带s表示可以一行以空格分隔添加多个DNS。
重启网卡生效
service networking restart
network: version: 2 renderer: networkd ethernets: 网卡名: dhcp4: false addresses: [192.168.1.1/24] gateway4: 192.168.1.254 nameservers: addresses: [8.8.8.8, 1.1.1.1]
重启网卡生效
netplan apply
Ubuntu 通过读取
/etc/resolv.conf
中的 DNS 地址进行查询。
这是系统默认的 DNS 管理器,也可以看做是一个本地 DNS 解析器,默认的本地 DNS 服务器 IP 是 127.0.0.53,其通过迭代的方式将 DNS 查询结果返回给应用程序。
/etc/resolv.conf -> /run/systemd/resolve/resolv.conf
可以看出这是一个软链接文件,可以通过在/etc/systemd/resolved.conf
添加 DNS 来配置该软链接。
[Resolve]DNS=8.8.8.8 1.1.1.1#FallbackDNS=#Domains=#LLMNR=no#MulticastDNS=no#DNSSEC=no#Cache=yesDNSStubListener=no
重启服务
systemctl restart systemd-resolved
查看设置情况
systemd-resolve --status
可以看到全局 DNS 设置成功。
Global DNS Servers: 8.8.8.8 1.1.1.1
一般来说,全局 DNS 配置(Global)和网卡DNS配置(Link 2),设置其中一个就可以的了。
这是 DNS 信息统一管理器,类似 netplan 的作用。
安装
apt install resolvconf
软链接会被改写指向到 resolvconf 的配置文件中。在安装前,/etc/resolv.conf
上的旧配置会被复制保留到/etc/resolvconf/resolv.conf.d/original
文件中。
/etc/resolv.conf -> /run/resolvconf/resolv.conf
可以通过在/etc/resolvconf/resolv.conf.d/head
添加 DNS 来配置该软链接。
nameserver 8.8.8.8nameserver 8.8.4.4
也可以直接运行命令定义链接的源文件,此命令会重新建立/etc/resolv.conf
的软链接。
resolvconf -a DNS文件路径例如:resolvconf -a /run/resolvconf/interface/systemd-resolvedresolvconf -a /run/resolvconf/interface/original.resolvconf
上述两种方式配置完成后,别忘了更新配置。
resolvconf --enable-updatesresolvconf -u
ifupdown(以 networking.service 服务运行)
配置文件 /etc/network/interfaces
开始以 netplan 作为前端配置,后端 renderer
配置文件 /etc/netplan/*.yaml
默认 networkd(以 systemd-networkd.service 服务运行)
可选 network-manager(以 NetworkManager.service 服务运行)
除了1台 Windows 测试机之外,其余3台都是 Mikrotik Router 设备,对它们在功能上进行了划分。CPE 客户端作为 L2TP Client,Firewall 作为端口转发,POP 作为 L2TP Server。
网卡配置
建立的三条L2TP Client,连接IP填 192.168.2.2,账号密码等参照POP。
网卡配置
配置端口转发
/ip firewall natadd action=dst-nat chain=dstnat dst-port=1701 protocol=udp to-addresses=\ 172.16.16.2 to-ports=1701add action=dst-nat chain=dstnat dst-port=4500 protocol=udp to-addresses=\ 172.16.16.2 to-ports=4500add action=dst-nat chain=dstnat dst-port=500 protocol=udp to-addresses=\ 172.16.16.2 to-ports=500
测试阶段可以不用,正式使用最好做下限制转发,参考示例如下。
/ip firewall filteradd action=accept chain=input dst-port=1701 protocol=udpadd action=accept chain=input dst-port=4500 protocol=udpadd action=accept chain=input dst-port=500 protocol=udpadd action=drop chain=inputadd action=accept chain=forward src-address=CPE公网网段add action=accept chain=forward src-address=其他需要转发的网段add action=drop chain=forward
网卡配置
开启 L2TP Server 并建立三个账号,Local Address 与 Remote Address 这里设置为 192.168.197.0/30、192.168.198.0/30 和 192.168.199.0/30,取里面的 1 和 2 。
配置 3 条线对应 WAN 口的 3 个 IP。
/ip firewall natadd action=src-nat chain=srcnat src-address=192.168.197.0/30 to-addresses=\ 10.0.137.210add action=src-nat chain=srcnat src-address=192.168.198.0/30 to-addresses=\ 10.0.137.211add action=src-nat chain=srcnat src-address=192.168.199.0/30 to-addresses=\ 10.0.137.212
以上就全部配置完毕了。
这 3 条线是无法同时启用的,同一时间只能让其中一条生效,否则无法使用。之前有测试过在转发机上配置3个不同的IP,然后给客户端 3 条线分别单独连接使用,依然无果。事后其实很容易理解,转发机上面的端口是无法重复使用的,同时建立 3 条线意味着相同的端口被 3 条线轮流抢占,导致谁都无法建立连接,自然无法使用了。
特点:安全易用,适用于单文件小容量传输。
例子:将主机A的 file.txt 文件传输到主机B的 dir 目录。
scp /主机A/file.txt root@192.168.1.1:/主机B/dir
例子:将主机A的 dir01 目录(包括所有子目录和文件)传输到主机B的 dir02 目录下,目标实际效果为/主机B/dir02/dir01
。
scp -Cpr ./主机A/dir01 root@47.98.248.151:/主机B/dir02
若对端主机默认端口为非 22 端口,则可以按如下参数指定端口。
scp -P 2222 /主机A/file.txt root@192.168.1.1:/主机B/dir
特点:支持断点续传,适用于多文件多目录大容量传输。
例子:将主机A中 dir01 目录下的内容同步到主机B中的 dir01 目录(会覆盖主机B的旧文件)。
rsync -aPhz /主机A/dir01/ root@192.168.1.1:/主机B/dir01
这里需要注意最后的斜杠,加与不加是有区别的。前面加了表示目录下的内容,后面不加表示目录,即意为将内容传到目录下。
若对端主机默认端口为非 22 端口,则可以按如下参数指定端口。
rsync -avPhz -e 'ssh -p 2222' /主机A/dir01/ root@192.168.1.1:/主机B/dir01
特点:适用于小文件大容量传输。
源机器 192.168.1.1
tar -cf - -C /data/dir01 . | pigz | nc -l 9876
目标机器 192.168.1.2
nc 192.168.1.1 9876 | pigz -d | tar -xf - -C /data/dir02
Requires: python = 2.7.5-93.el7_9Installed: python-2.7.5-94.el7_9.x86_64 (@updates)
根据建议使用--skip-broken
尝试无果后,直接删除已安装的高版本软件包,加上--nodeps
选项表示忽略软件包的依赖问题。这两个软件包是一起的,降级的话需要一起回退。
rpm -e --nodeps python-2.7.5-94.el7_9.x86_64rpm -e --nodeps python-libs-2.7.5-94.el7_9.x86_64
由于 yum 命令依赖于python,所以后续安装只能通过手动上传软件包进行安装。
rpm -i python-2.7.5-93.el7_9.x86_64.rpm python-libs-2.7.5-93.el7_9.x86_64.rpm
相关资料
]]>将 home 目录缩小至 5G,将剩下的容量全部加到根目录上。
[root@localhost ~]# df -ThFilesystem Type Size Used Avail Use% Mounted on/dev/mapper/centos-root xfs 48G 1003M 47G 3% /devtmpfs devtmpfs 1.9G 0 1.9G 0% /devtmpfs tmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs tmpfs 1.9G 8.8M 1.9G 1% /runtmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/sda2 xfs 2.0G 145M 1.9G 8% /boot/dev/mapper/centos-home xfs 50G 33M 50G 1% /hometmpfs tmpfs 379M 0 379M 0% /run/user/0
安装备份工具
yum -y install xfsdump
在根目录下备份为 home.xfsdump,需要保证根目录有足够的空间。
xfsdump -f /home.xfsdump /home
缩小 home 容量,需要确保当前没有程序正在使用该目录中的数据。
umount /homelvreduce -L 5G /dev/mapper/centos-home
输出
WARNING: Reducing active logical volume to 5.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce centos/home? [y/n]: y Size of logical volume centos/home changed from 50.00 GiB (12800 extents) to 5.00 GiB (1280 extents). Logical volume centos/home successfully resized.
扩容 root 根目录
lvextend -l +100%FREE /dev/mapper/centos-root
输出
Size of logical volume centos/root changed from <48.00 GiB (12287 extents) to <93.00 GiB (23807 extents). Logical volume centos/root successfully resized.
磁盘扩容成功后需要同步到现有的文件系统(延展空间)
xfs_growfs /dev/centos/root
输出
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3145472 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=12581888, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=6143, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 12581888 to 24378368
resize2fs 针对 ext2/ext3/ext4 文件系统的调整。xfs_growfs 针对 xfs 文件系统的调整。
无法直接挂载,缩小后的磁盘需要重新格式化才能使用。
mkfs.xfs -f /dev/mapper/centos-home
重新挂载
mount /dev/mapper/centos-home /home
将数据还原到 home 目录
xfsrestore -f /home.xfsdump /home
输出
xfsrestore: using file dump (drive_simple) strategyxfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and controlxfsrestore: searching media for dumpxfsrestore: examining media file 0xfsrestore: dump description: xfsrestore: hostname: localhost.localdomainxfsrestore: mount point: /homexfsrestore: volume: /dev/mapper/centos-homexfsrestore: session time: Mon Sep 11 01:22:34 2023xfsrestore: level: 0xfsrestore: session label: "home"xfsrestore: media label: "home"xfsrestore: file system id: 802b8a6d-5502-4585-8d67-5c994f827e73xfsrestore: session id: c3dac766-698b-4f62-9b5d-a2b430682cefxfsrestore: media id: e23b0de1-edf4-4b1f-b86a-a85c9e1c7f02xfsrestore: using online session inventoryxfsrestore: searching media for directory dumpxfsrestore: reading directoriesxfsrestore: 1 directories and 0 entries processedxfsrestore: directory post-processingxfsrestore: restore complete: 0 seconds elapsedxfsrestore: Restore Summary:xfsrestore: stream 0 /home.xfsdump OK (success)xfsrestore: Restore Status: SUCCESS
最终效果
[root@localhost ~]# df -ThFilesystem Type Size Used Avail Use% Mounted on/dev/mapper/centos-root xfs 93G 1.2G 92G 2% /devtmpfs devtmpfs 1.9G 0 1.9G 0% /devtmpfs tmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs tmpfs 1.9G 8.8M 1.9G 1% /runtmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/sda2 xfs 2.0G 145M 1.9G 8% /boottmpfs tmpfs 379M 0 379M 0% /run/user/0/dev/mapper/centos-home xfs 5.0G 33M 5.0G 1% /home
]]>
version: '3.8'services: app: image: 'jc21/nginx-proxy-manager:2.9.18' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '8181:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
默认账号密码
admin@example.com
changeme
因为之前在其它地方部署过,配置参数完全一样,但就这里不行。
在配置通配符证书时报错
Error: Command failed: certbot certonly --config "/etc/letsencrypt.ini" --cert-name "npm-6" --agree-tos --email "livejq@qq.com" --domains "*.livejq.top" --authenticator dns-dnspod --dns-dnspod-credentials "/etc/letsencrypt/credentials/credentials-6"An unexpected error occurred:ModuleNotFoundError: No module named 'zope'Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /tmp/certbot-log-q62hqia9/log or re-run Certbot with -v for more details. at ChildProcess.exithandler (node:child_process:399:12) at ChildProcess.emit (node:events:526:28) at maybeClose (node:internal/child_process:1092:16) at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)
报错信息提示缺少“zope”模块,这大概是由于当前主机的网络无法成功下载到该模块,解决的办法只能通过代理进行下载。
首先需要进入到该容器
docker exec -it $(docker ps -f "name=nginx_proxy_manager" -q) bash
等会需要通过代理下载安装包,所以先安装代理模块。
pip install pysocks
通过代理安装 zope 模块,代理地址修改为你的信息。
pip install zope --proxy=socks5://192.168.1.1:1080
安装好之后就可以配置成功啦。
]]>实验环境:Windows 11 专业版
gpedit.msc 打开本地组策略
regedit 打开注册表
netplwiz 添加用户
lusrmgr.msc 打开本地用户和组
secpol.msc 打开本地安全策略
用户配置>管理模版>控制面板,将“禁止访问控制面板和PC设置”修改为“已启用”。
通过注册表禁用
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,将“NoControlPanel”修改为“1”值即可禁用。
用户配置>管理模版>Windows组件>MicroSoft 管理控制台>受限的/许可的管理单元>组策略,将“组策略编辑器”修改为“已禁用”。
通过注册表恢复
HKEY_CURRENT_USER\Software\Policies\Microsoft\MMC{8FC0B734-A0E1-11D1-A7D3-0000F87571E3},将“Restrict_Run”修改为“0”值即可恢复。
用户配置>管理模版>系统,将“阻止访问注册表编辑工具”修改为“已启用”。
通过命令禁用
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /t Reg_dword /v DisableRegistryTools /f /d 2
通过注册表禁用
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,新建 DWORD 32位(REG_DWORD),命名为“DisableRegistryTools”,十六进制值设置为“2”。
除了在本地组策略里面重新启用之外,只能用三方工具进行启用。推荐 Reg Organizer ,Registry Workshop 需要收费,但可以试用。
计算机配置>Windows设置>安全设置>本地策略>安全选项,列出常用选项。
禁用上一章节列出的“用户帐户控制: 以管理员批准模式运行所有管理员”,然后重启计算机生效。
通过注册表禁用
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System,将“EnableLUA”修改为“0”值。
需要注意的是,重启后,部分系统级文件夹会变得无法写入。例如:Program Files
和Program Files (x86)
这两个文件夹是大多数软件默认的安装路径,文件夹所有者会由原来的 Administrators 变成TrustedInstaller
,任何用户都无法往里面安装程序。如果你是管理员账户,有需要往里面安装程序的话,可以将这两个文件夹所有者改回 Administrators 用户组。
标准用户如果需要安装游戏加速器之类的软件的话,虽然可以安装成功,但是在打开运行的过程中需要修改系统级的网络配置,但标准用户是没有这个权限的,所以会报各种错误。
综上所述,如果用户对安装新软件的需求比较大,而且又是游戏玩家,建议直接将其直接放入 Administrators 用户组,会省下很多麻烦。至于怕其弄乱系统设置之类的,这个完全可以做进一步的处理。按照之前所述,禁用掉系统关键程序即可。
[root@Cnyunwei ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 11:0 1 1024M 0 rom sda 8:0 0 250G 0 disk ├─sda1 8:1 0 512M 0 part /boot├─sda2 8:2 0 4G 0 part [SWAP]└─sda3 8:3 0 65.5G 0 part /
[root@Cnyunwei ~]# lvextend -l +100%FREE /dev/sda3 Path required for Logical Volume "sda3". Please provide a volume group name Run `lvextend --help' for more information.
[root@Cnyunwei ~]# fdisk -lDisk /dev/sda: 268.4 GB, 268435456000 bytes255 heads, 63 sectors/track, 32635 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0004b166 Device Boot Start End Blocks Id System/dev/sda1 * 1 66 524288 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 66 588 4194304 82 Linux swap / SolarisPartition 2 does not end on cylinder boundary./dev/sda3 588 9138 68680704 83 Linux
[root@Cnyunwei ~]# fdisk /dev/sdaWARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): pDisk /dev/sda: 268.4 GB, 268435456000 bytes255 heads, 63 sectors/track, 32635 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0004b166 Device Boot Start End Blocks Id System/dev/sda1 * 1 66 524288 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 66 588 4194304 82 Linux swap / SolarisPartition 2 does not end on cylinder boundary./dev/sda3 588 9138 68680704 83 LinuxCommand (m for help): mCommand action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)Command (m for help): dPartition number (1-4): 4Warning: partition 4 has empty typeCommand (m for help): 33: unknown commandCommand action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)Command (m for help): dPartition number (1-4): 3Command (m for help): dPartition number (1-4): 3Warning: partition 3 has empty typeCommand (m for help): uChanging display/entry units to sectorsCommand (m for help): uChanging display/entry units to cylindersCommand (m for help): pDisk /dev/sda: 268.4 GB, 268435456000 bytes255 heads, 63 sectors/track, 32635 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0004b166 Device Boot Start End Blocks Id System/dev/sda1 * 1 66 524288 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 66 588 4194304 82 Linux swap / SolarisPartition 2 does not end on cylinder boundary.Command (m for help): nCommand action e extended p primary partition (1-4)pPartition number (1-4): 3First cylinder (588-32635, default 588): 588Last cylinder, +cylinders or +size{K,M,G} (588-32635, default 32635): 32635Command (m for help): wrThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.You have mail in /var/spool/mail/root[root@Cnyunwei ~]# df -hlFilesystem Size Used Avail Use% Mounted on/dev/sda3 65G 53G 8.6G 87% /tmpfs 3.9G 0 3.9G 0% /dev/shm/dev/sda1 488M 45M 419M 10% /boot[root@Cnyunwei ~]# init 6
[root@Cnyunwei ~]# resize2fs /dev/sda3resize2fs 1.41.12 (17-May-2010)Filesystem at /dev/sda3 is mounted on /; on-line resizing requiredold desc_blocks = 5, new_desc_blocks = 16Performing an on-line resize of /dev/sda3 to 64355255 (4k) blocks.The filesystem on /dev/sda3 is now 64355255 blocks long.[root@Cnyunwei ~]# df -hlFilesystem Size Used Avail Use% Mounted on/dev/sda3 242G 53G 177G 23% /tmpfs 3.9G 0 3.9G 0% /dev/shm/dev/sda1 488M 45M 419M 10% /boot
]]>
此脚本文件保存为 qb_hash_match.sh
#!/bin/bashtarget_values=$(cat hash.txt)mkdir tempdirfor value in $target_valuesdo cp $value.torrent tempdir cp $value.fastresume tempdirdone
将 hash.txt 和 qb_hash_match.sh 这两个文件放到需要迁移的 qB 种子 BT_backup 目录下,先运行如下命令转换为 linux 系统的换行符。
sed -i 's/\r//g' hash.txtsed -i 's/\r//g' qb_hash_match.sh
然后直接运行脚本
chmod +x qb_hash_match.sh./qb_hash_match.sh
最后将生成的 tempdir 目录下的文件复制到目标 qB 的 BT_backup 目录即可。当然了,前提是你已经先将对应的文件转移到目标 qB 所映射的目录下才能开始做种。
]]>测试环境:RouterOS 6.49.8
这里命名为 VPN_IKEv2_CA,有效期设置为 3650 天。
勾选 key cert. sign 和 crl sign 后点击 Apply。
然后点击旁边的 Sign 按钮
直接点击 Start 完成自签。
这里命名为 VPN_IKEv2_SERVIDOR,Subject Alt. Name 默认选 IP 并填写 IKEv2 准备对外提供连接的IP地址。
勾选 tls server 后点击 Apply。然后直接点击旁边的 Sign 按钮,选择刚才建好的 CA 根证书,点击 Start 开始签发。
这里命名为 VPN_IKEv2_CLIENT。
勾选 tls client 后点击 Apply。同样点击旁边的 Sign 按钮,选择刚才建好的 CA 根证书,点击 Start 开始签发。
客户端连接的话需要用到 CA 证书和客户端证书。
导出 CA 证书
导出客户端证书(这里需要注意,要设置8位数的密码)
首先创建一个地址池。
这里命名为 ikev2-profile,只需修改前面的加密方式。
这里命名为 ikev2-proposal,生存时间适当加长,PFS Group 选 none。
这里命名为 ikev2-group。
勾选 Template 后选择上面创建的 Group。
Action 栏目中修改 Proposal 为我们刚创建的即可。
这里创建了两个 peer。
这里命名为 ikev2-cfg。
此配置适用于在IOS、Android 或者是 Windows 上配置证书连接。
在 iPhone 中的配置示例,前提是先将 VPN_IKEv2_CA.crt 和 VPN_IKEv2_CLIENT.p12 证书下载后安装。
需要注意的是,一张 VPN_IKEv2_CLIENT 证书即使导入到多个客户端也无法同时连接使用,一个证书只能对应一个在线的客户端。
在小米手机中的配置示例。
这里用到了 UDP 的 500 和 4500 端口,记得放开。之前添加了 Pool 的 IP 段记得做 SNAT,INPUT 和 Forward 也放行下。
/ip firewall filteradd action=accept chain=input ipsec-policy=in,ipsec src-address=\ 192.168.123.0/24add action=accept chain=forward ipsec-policy=in,ipsec src-address=\ 192.168.123.0/24add action=accept chain=input dst-port=500,4500 protocol=udp/ip firewall natadd action=masquerade chain=srcnat src-address=192.168.123.0/24
这个通常都是由客户端配置参数填写错误导致的,明显的特征是点击连接后很快断开,客户端的配置与 Identities 中的配置不匹配( 存在 Identities,但客户端配置存在某些配置参数的错误)。
客户端连接时弹出连接错误提示,这个其实跟前面的错误类似。( 不存在 Identities,也因此客户端配置无法生效)
这个还是客户端的配置问题,多半都是类型选择错误。例如:在 Identities 配置了 IKEv2/IPSec PSK ,但是安卓手机上选的类型为 IPSec Xauth PSK。
出现这种错误很大可能就是改动或者删除了默认配置导致的。
failed to pre-process ph2 packet
最简单的方法是直接清除 IKEv2/IPSec 配置并还原 IPSec 至默认配置,可参考 l2tp/ipsec 正常使用的设备配置。
/ip ipsec policyset 0 dst-address=0.0.0.0/0 src-address=0.0.0.0/0
这里采用的是网桥部署模式,Router是网关设备,Console 用来管理 Panabit,Client 即为客户机,作为 HTTP 管控功能实现的目标主机。
实验目标是当客户机访问谷歌时自动跳转到本站,因此,满足这个过程需要几个条件。提供需要匹配的域名、添加匹配策略后让客户机执行跳转到本站的动作、规定此策略在什么时间段生效(通常是全天)。
在添加策略之前先创建一个策略组,这里命名为“搜索引擎”,然后选中这个策略组,在里面添加策略。由于策略组里面可以存在多条策略,所以存在匹配优先级。策略编号数字越小优先级越高,策略组里面的策略按优先级匹配,一旦匹配成功后就不会继续往下匹配。
这里需要说明的是,访问域名选择我们刚才的域名群组。输出线路/接口选择原路返回,这个跟我们的部署模式有关。由于网关或网桥模式中的流量都经过 Panabit 设备,所以可以默认原路返回,旁路模式的话需要主动选择一条线路(三层接口)返回。
这里测试了常用的几款浏览器,只有 Firefox 稳定生效。究其原因,还是回到标题,所谓 HTTP 管控,就是只能对 HTTP 进行管控,对加密的 HTTPS 没辙(也不是完全没辙,TCP重置可以对 HTTPS 的请求进行阻断)。但是现如今的浏览器基本都实现了 HSTS(HTTP Strict-Transport-Security) 策略,也就是说一个网站比如这里的谷歌,如果可以通过 HTTPS 进行访问,并且在返回的标头中加入了类似“Strict-Transport-Security:max-age=31536000”,那么浏览器在第一次通过 HTTP 请求访问谷歌之后,会根据谷歌标头告知的内容,将谷歌网址加入到浏览器本地的 HSTS 策略并保存一年,下次再访问谷歌时,会自动先将 HTTP 的请求转换成 HTTPS 之后再发出。
要说具体 URL 跳转功能为什么对 HTTPS 没生效,猜测应该是因为 HTTPS 是通过非对称加密的方式验证通信的合法性的。所以当请求的 URL 被 Panabit 匹配到后,发送伪 HTTP 报文给客户端,但是没有包含合法证书,所以客户端并没有响应,直接丢弃了。
]]><ID>.conf
,其中<ID>
是虚拟机或容器的 ID 号。文件路径组成规则为
/etc/pve/<虚拟机类型>/<ID>.conf
例如:我这里是 VM ID 为 401 的 Windows 10 系统的 KVM 虚拟机,则编辑文件/etc/pve/qemu-server/401.conf
args: -vnc 0.0.0.0:89boot: cnbootdisk: sata1cores: 1ide2: none,media=cdrommemory: 6144name: Win10net0: e1000=CE:49:00:9B:13:60,bridge=vmbr1,firewall=1numa: 0ostype: win10sata1: local-lvm:vm-401-disk-0,cache=writethrough,size=60Gscsihw: virtio-scsi-pcismbios1: uuid=98fca966-8f30-440f-ae9c-921c46484e4bsockets: 4vmgenid: c78e020e-33d0-4876-93b6-879b3bb5dfcd
如上所示,VNC 端口通过args: -vnc 0.0.0.0:89
声明,表示端口为 5989 。
/etc/network/interfaces
,修改管理IP端口网络。auto vmbr1iface vmbr1 inet static address 192.168.111.5/24 gateway 192.168.111.2 bridge-ports enp2s0 bridge-stp off bridge-fd 0
保存并重启网络后生效
systemctl restart networking
到此 Web 管理IP就算已经修改完成,下面两个不修改基本没影响,强迫症可继续。
编辑/etc/hosts
127.0.0.1 localhost.localdomain localhost192.168.111.5 pve.livejq.top
编辑/etc/issue
------------------------------------------------------------------------------Welcome to the Proxmox Virtual Environment. Please use your web browser to configure this server - connect to: https://192.168.111.5:8006/------------------------------------------------------------------------------
qm
命令很容易导入到 Proxmox VE 系统。qm importdisk <vmid> <source> <storage> [OPTIONS]或qm disk import <vmid> <source> <storage> [OPTIONS]
例如:
第一次执行失败是因为还没有创建 ID 为 101 的虚拟机,执行成功之后会给出新增加的一块未使用的磁盘。
选中这块磁盘点击添加即可
Intel® RSTe(Rapid Storage Technology enterprise)是一种软件解决方案,可在支持 Intel 芯片组的服务器上运行,以提供高性能的存储解决方案。 RSTe 允许服务器管理员通过将多个磁盘驱动器组合成逻辑存储设备(例如RAID 0、1、5或10)来增强数据存储性能和可靠性。
独立阵列卡(Independent RAID Card)是一种硬件解决方案,通常是一个插入服务器主板的扩展卡。独立阵列卡是一种完全独立的设备,由专用处理器和内存控制,并且具有自己的BIOS和驱动程序,可以通过在其上连接多个磁盘驱动器来提供高性能的RAID解决方案。独立阵列卡通常具有更高的性能和更强的可靠性,因为它们是专为RAID设计的,并且可以使用独立的CPU和内存。
此次测试平台为 Dell C6220 二代四子星服务器,搭载Intel® RSTe v3.8.0.1029
。用了2块 1TB SATA HDD 硬盘组 RAID1 进行测试。
首先需要按F2
进 BIOS 将硬盘驱动器设置为RAID 模式
。
然后重启,Logo过了之后按Ctrl+I
组合键进入 Intel® RSTe 进行 RAID 配置。
这边测试安装了 ESXI 6.7,但是无法识别到刚才做的 RAID1。因此,在使用 VMware ESXi 操作系統时,需要将 ATA 设置为 “AHCI”或者“IDE”模式,以避免使用到 Intel® RSTe 板载 SATA RAID。
尝试安装了 Windows 11 可以正常识别。
Intel® RSTe 板载阵列是一种软件解决方案,即属于我们通常所说的“软RAID”。与阵列卡不同,它需要系统安装特定的驱动程序支持。另一方面,它还有一些硬件要求,需要服务器本身支持 RAID 存储。
root@pnetlab:~# df -hlFilesystem Size Used Avail Use% Mounted onudev 7.8G 0 7.8G 0% /devtmpfs 1.6G 8.0M 1.6G 1% /run/dev/mapper/ubuntu--vg-ubuntu--lv 97G 91G 1.3G 99% /tmpfs 7.9G 0 7.9G 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup/dev/vda2 976M 156M 754M 18% /boottmpfs 1.6G 0 1.6G 0% /run/user/0
使用 qemu-img 工具直接扩容
root@PowerEdge:/mnt/user/isos# qemu-img resize PNET_4.2.10.qcow2 +200GImage resized.
扩容前
root@PowerEdge:/mnt/user/isos# qemu-img info PNET_4.2.10.qcow2 image: PNET_4.2.10.qcow2file format: qcow2virtual size: 100 GiB (107374182400 bytes)disk size: 92.3 GiBcluster_size: 65536Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
扩容200G后
root@PowerEdge:/mnt/user/isos# qemu-img info PNET_4.2.10.qcow2 image: PNET_4.2.10.qcow2file format: qcow2virtual size: 300 GiB (322122547200 bytes)disk size: 92.3 GiBcluster_size: 65536Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
开机进入系统之后,首先查看下磁盘大小变化情况。
确实扩容成功了,但是出现了“GPT PMBR size mismatch”的错误,因为我先前扩容了整个磁盘,所以 PMBR 分区的起始位置也跟着发生了变化。
来自 ChatGPT 的回答:PMBR 分区(Protective MBR Partition,保护性主引导分区)是一种特殊的分区类型,它在使用较老的 BIOS 引导方式时,用于保护磁盘中的 GPT 分区结构。在使用 GPT 分区格式时,硬盘的第一个扇区会被分配给 GPT 分区表,并记录分区信息。但是,由于一些老的操作系统或计算机仅支持使用 MBR 分区表和 BIOS 引导方式,这就导致了在这些系统中无法直接读取和使用 GPT 分区的情况。为了解决这个问题,PMBR 分区的作用就在于在 GPT 分区表前面创建一个 MBR 分区表,同时在该 MBR 分区表中定义一个类型为 “Protective” 的分区,用来保护 GPT 分区表不被误操作或覆盖。这样,使用老的 BIOS 引导方式时,就可以直接读取 MBR 分区表,并将 GPT 分区当成一个未知的分区,从而保证了硬盘的数据完整性。因此,PMBR 分区在使用 GPT 分区格式的计算机中非常重要,它能够确保老的 BIOS 引导方式不会对 GPT 分区造成破坏,保障数据安全。
修复错误
root@pnetlab:~# parted -lModel: Linux device-mapper (linear) (dm)Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 106GBSector size (logical/physical): 512B/512BPartition Table: loopDisk Flags: Number Start End Size File system Flags 1 0.00B 106GB 106GB ext4Warning: Not all of the space available to /dev/vda appears to be used, you canfix the GPT to use all of the space (an extra 419430400 blocks) or continue withthe current setting? Fix/Ignore? fix Model: Virtio Block Device (virtblk)Disk /dev/vda: 322GBSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1076MB 1074MB ext4 3 1076MB 107GB 106GB
查看扩容后块设备的使用情况
将新增加的空间分配到根目录所在的物理卷上/dev/vda3
root@pnetlab:~# growpart /dev/vda 3CHANGED: partition=3 start=2101248 old: size=207611904 end=209713152 new: size=627044319,end=629145567root@pnetlab:~# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 300G 0 disk├─vda1 252:1 0 1M 0 part├─vda2 252:2 0 1G 0 part /boot└─vda3 252:3 0 299G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
扩展逻辑卷
root@pnetlab:~# pvresize /dev/vda3 Physical volume "/dev/vda3" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
将空间全部分配到挂载在根目录下的逻辑卷
root@pnetlab:~# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv Size of logical volume ubuntu-vg/ubuntu-lv changed from <99.00 GiB (25343 extents) to <299.00 GiB (76543 extents). Logical volume ubuntu-vg/ubuntu-lv successfully resized.
刷新文件系统,使刚才分配的空间可用。
root@pnetlab:~# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lvresize2fs 1.44.1 (24-Mar-2018)Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing requiredold_desc_blocks = 13, new_desc_blocks = 38The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 78380032 (4k) blocks long.
最终成功扩容根目录
关键信息是“the backup GPT is located beyond the end of disk.”,大概意思就是存在某个分区表超出了磁盘空间的情况。后面也说得很清楚,可能是缩减了磁盘大小(做阵列时经常会发生)导致分区表超出磁盘之外了。
之前有过类似的情况,当时是先尝试安装 Ubuntu 桌面发行版,安装成功之后再重新尝试安装 ESXi 就正常了。原理应该就是将那块做了 RAID 的磁盘重新格式化后分区了,只是有时候也不太行。这次是直接进 PE 系统,将盘刷成 DOS 3+ 格式就正常安装了。