笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
PVE 8.4 + VyOS 1.3.3 个人数据中心:双宽带互备、透明代理、IPv6 公网搭建与排错
本文记录了一套个人级别环境的完整搭建过程。目标是在一台 24 核服务器上,通过 PVE 虚拟化 VyOS 软路由,接入两条宽带(一条 PPPoE 主宽带,一条 DHCP 备用宽带),实现双宽带故障自动切换、基于 Fake-IP 的透明代理、内网多网段隔离、公网 IPv6 分配,以及通过点对点链路实现独立于物理网线的管理通道。
阅读本文前请知悉:这不是一个“一键脚本”类的教程。本文假设你对 TCP/IP、子网划分、DHCP、DNS 有基本认知,并且愿意在终端里敲命令。教程会完整还原搭建过程中遇到的典型故障及其根因分析,目标是让你不仅能把环境跑起来,还能在出问题时知道该查哪里。
一、硬件与初始规划
1.1 服务器物理接口
- 网口 1:enp1 → 直通给 VyOS,用作主宽带 PPPoE 拨号
- 网口 2:enp2 → 直通给 VyOS,用作 AP 无线局域网(10.99.0.0/24)
- 网口 3:enp3 → 直通给 VyOS,用作备用宽带上行(连接上游路由器 192.168.1.0/24)
- 网口 4:enp4 → 不直通,PVE 宿主管理口(10.0.0.15/24)
- BMC 口:独立硬件管理,不参与虚拟化
1.2 网段规划
| 网段 | 用途 | VyOS 接口 | 网关 |
|---|---|---|---|
| 10.99.0.0/24 | AP 终端网段(唯一走代理的网段) | eth1 | 10.99.0.1 |
| 10.168.0.0/16 | 主宽带虚拟机池 | eth3 | 10.168.0.1 |
| 172.26.0.0/16 | 备用宽带虚拟机池 | eth4 | 172.26.0.1 |
| 100.64.27.0/24 | 代理/旁路由点对点 | eth6 | 100.64.27.1 |
| 10.10.10.0/32 | IPv6 公网点对点 | eth5 | 10.10.10.1 |
| 172.31.0.0/24 | PVE 管理点对点 | eth7 | 172.31.0.1 |
| 10.71.7.0/24 | DNS 点对点 | eth8 | 10.71.7.1 |
1.3 出口规划
- 主宽带:pppoe0,账号
<YOUR_PPPOE_USER> - 备用宽带:eth2,DHCP 获取 192.168.1.x 地址,上游为上游路由器 192.168.1.1
- 默认路由走 pppoe0,备用宽带通过静态路由表 10 实现 172.26 网段专用出口
- 双宽带互为主备:pppoe0 断开自动切 eth2(管理距离 200)
二、PVE 宿主机安装与基础配置
2.1 安装 PVE 8.4.19
从 Proxmox 官网下载 ISO,使用 UEFI 模式启动安装。
128G SSD 分区方案:
- 20G:宿主机系统、快照、日志
- 剩余全部:local-lvm 存储池,承载所有虚拟机磁盘
安装完成后,通过 Web 界面或 SSH 登录。
2.2 内核锁定(防止直通网卡随机死机)
当前运行内核为 6.8.12-28-pve。PVE 8.4 系列中,29 及以上内核存在已知的 PCI 直通稳定性问题,必须锁定。
# 锁定当前内核包,禁止 apt 自动升级
apt-mark hold pve-kernel-6.8.12-28-pve
2.3 开启 IOMMU 并加载 VFIO 模块
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 行中加入:
intel_iommu=on iommu=pt
(AMD CPU 改为 amd_iommu=on iommu=pt)
更新 grub:
update-grub
编辑 /etc/modules,添加:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
更新 initramfs 并重启:
update-initramfs -u
reboot
重启后验证:
dmesg | grep -e DMAR -e IOMMU
看到 IOMMU enabled 即表示成功。
2.4 物理网口 MAC 地址固定(防止重启后网卡名乱序)
PVE 使用 systemd 的 .link 文件将网卡名称固定为 eth0-eth3,避免内核自动命名(enpXsX)导致的接口名称漂移。
创建 /etc/systemd/network/10-eth0.link:
[Match]
MACAddress=<YOUR_ETH0_MAC>
[Link]
Name=eth0
类似地创建 eth1、eth2、eth3 对应的 .link 文件,MAC 地址填写实际物理接口的地址。这些文件必须存在,否则删除它们会导致网卡名恢复为 enpXsX,从而与 /etc/network/interfaces 中的配置不匹配,系统会直接进入 emergency mode。
2.5 配置 PVE 宿主网络
编辑 /etc/network/interfaces:
auto lo
iface lo inet loopback
# Port 0-2:直通给 VyOS,不配地址
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto eth2
iface eth2 inet manual
# Port 3:PVE 管理口,固定 IP
auto eth3
iface eth3 inet static
address 10.0.0.15/24
gateway 10.0.0.1
dns-nameservers 223.5.5.5 119.29.29.29
# 四个纯虚拟网桥,供 VyOS 虚拟机使用
auto vmbr_wan1_vm
iface vmbr_wan1_vm inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
auto vmbr_wan2_vm
iface vmbr_wan2_vm inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
auto vmbr_proxy
iface vmbr_proxy inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
auto vmbr_ipv6
iface vmbr_ipv6 inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
应用配置:
systemctl restart networking
2.6 锁定 DNS 配置文件
PVE 的 DHCP 客户端或其他服务可能覆盖 /etc/resolv.conf。写入正确 DNS 后锁定文件:
cat > /etc/resolv.conf << 'EOF'
nameserver 223.5.5.5
nameserver 119.29.29.29
EOF
chattr +i /etc/resolv.conf
三、创建 VyOS 虚拟机并直通物理网卡
3.1 下载 VyOS 1.3.3 LTS
从 VyOS 官方或镜像站下载 vyos-1.3.3-amd64.iso,上传至 PVE 的 ISO 存储目录 /var/lib/vz/template/iso/。
为什么用 1.3.3 而不用 1.4/1.5?
1.3 系列是长期支持版本,命令语法稳定。1.4/1.5 的 DHCP、防火墙、策略路由语法有较大变动,本文所有命令均基于 1.3.3。
3.2 创建虚拟机并添加虚拟网卡
qm create 100 \
--name Infra-gateway-01 \
--bios ovmf \
--machine q35 \
--ostype l26 \
--cpu host \
--cores 12 \
--memory 2048 \
--scsihw virtio-scsi-single \
--onboot 1 \
--agent enabled=1 \
--vga serial0 \
--serial0 socket \
--boot order=scsi0 \
--efidisk0 vm-storage:0,efitype=4m,pre-enrolled-keys=0,size=528K \
--scsi0 vm-storage:2,cache=writeback,discard=on,ssd=1
添加四张虚拟网卡,分别连接到对应的虚拟网桥,MAC 地址必须在 PVE 端固定,否则重启后网卡顺序可能变化:
qm set 100 --net3 virtio=FC:AA:14:AF:64:C0,bridge=vmbr_wan1_vm,firewall=0
qm set 100 --net4 virtio=FC:AA:14:AF:64:C1,bridge=vmbr_wan2_vm,firewall=0
qm set 100 --net5 virtio=FC:AA:14:AF:64:C2,bridge=vmbr_ipv6,firewall=0
qm set 100 --net6 virtio=FC:AA:14:AF:64:C3,bridge=vmbr_proxy,firewall=0
3.3 直通物理网卡
确认物理网卡的 PCI 地址:
lspci | grep -i ethernet
假设输出:
- 04:00.0 → enp1 (WAN1)
- 05:00.0 → enp2 (AP)
- 07:00.0 → enp3 (WAN2)
执行直通:
qm set 100 --hostpci0 04:00.0,pcie=1
qm set 100 --hostpci1 05:00.0,pcie=1
qm set 100 --hostpci2 07:00.0,pcie=1
3.4 挂载 ISO 并安装系统
qm set 100 --ide2 /var/lib/vz/template/iso/vyos-1.3.3-amd64.iso,media=cdrom
qm set 100 --boot order=ide2
qm start 100
qm terminal 100
进入安装界面后,使用默认用户名 vyos / 密码 vyos 登录,执行 install image,按提示完成安装。安装完成后 poweroff,回到 PVE 卸载 ISO 并重新从硬盘启动:
qm set 100 --delete ide2
qm set 100 --boot order=scsi0
qm start 100
四、VyOS 基础配置
4.1 固定网卡名称(hw-id 绑定)
VyOS 使用配置中的 hw-id 字段将接口名称与 MAC 地址绑定,重启后名称不会变化。这是 VyOS 官方推荐的方式,比 udev 规则更可靠。
在 VyOS 终端中查看所有接口的 MAC 地址:
ip -c a
进入配置模式,为每个接口绑定 hw-id:
configure
set interfaces ethernet eth0 hw-id '<ETH0_MAC>'
set interfaces ethernet eth1 hw-id '<ETH1_MAC>'
set interfaces ethernet eth2 hw-id '<ETH2_MAC>'
set interfaces ethernet eth3 hw-id '<ETH3_MAC>'
set interfaces ethernet eth4 hw-id '<ETH4_MAC>'
set interfaces ethernet eth5 hw-id '<ETH5_MAC>'
set interfaces ethernet eth6 hw-id '<ETH6_MAC>'
commit
save
4.2 配置接口地址与 PPPoE
configure
# WAN1 - PPPoE
set interfaces ethernet eth0 description 'WAN1-PPPoE'
# AP 网段
set interfaces ethernet eth1 address '10.99.0.1/24'
set interfaces ethernet eth1 description 'LAN-AP-10.99.0.1'
# WAN2 - 备用宽带
set interfaces ethernet eth2 address '192.168.1.229/24'
set interfaces ethernet eth2 description 'WAN2-Upstream'
# 主宽带虚拟机池
set interfaces ethernet eth3 address '10.168.0.1/16'
set interfaces ethernet eth3 description 'VM-WAN1'
# 备用宽带虚拟机池
set interfaces ethernet eth4 address '172.26.0.1/16'
set interfaces ethernet eth4 description 'VM-WAN2'
# IPv6 点对点
set interfaces ethernet eth5 address '10.10.10.1/32'
set interfaces ethernet eth5 description 'IPv6-P2P'
# 代理点对点
set interfaces ethernet eth6 address '100.64.27.1/32'
set interfaces ethernet eth6 description 'Proxy-P2P'
# PVE 管理点对点
set interfaces ethernet eth7 address '172.31.0.1/32'
set interfaces ethernet eth7 description 'PVE-MGMT-P2P'
# DNS 点对点
set interfaces ethernet eth8 address '10.71.7.1/32'
set interfaces ethernet eth8 description 'DNS-P2P'
# PPPoE 拨号
set interfaces pppoe pppoe0 authentication user '<YOUR_PPPOE_USER>'
set interfaces pppoe pppoe0 authentication password '<YOUR_PPPOE_PASSWORD>'
set interfaces pppoe pppoe0 source-interface 'eth0'
set interfaces pppoe pppoe0 mtu '1492'
set interfaces pppoe pppoe0 description 'Main-PPPoE'
commit
save
4.3 配置默认路由和核心静态路由
configure
# 默认路由走 pppoe0
set protocols static interface-route 0.0.0.0/0 next-hop-interface pppoe0
# 去往二级路由器 LAN 侧的回程路由
set protocols static route 10.0.0.0/24 next-hop 192.168.1.53
# 去往 PVE 的点对点路由
set protocols static interface-route 172.31.0.151/32 next-hop-interface eth7
set protocols static interface-route 172.31.0.153/32 next-hop-interface eth7
# 去往代理和 DNS 的点对点路由
set protocols static interface-route 100.64.27.51/32 next-hop-interface eth6
set protocols static interface-route 100.64.27.183/32 next-hop-interface eth6
set protocols static interface-route 10.71.7.43/32 next-hop-interface eth8
# IPv6 点对点
set protocols static interface-route 10.10.10.10/32 next-hop-interface eth5
# 备用宽带专用路由表(table 10,供 172.26 网段使用)
set protocols static table 10 route 0.0.0.0/0 next-hop 192.168.1.1
# 双宽带主备:pppoe0 断开时自动切 eth2
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1 distance 200
# Fake-IP 代理专用路由表(table 100)
set protocols static table 100 route 0.0.0.0/0 next-hop 100.64.27.51
commit
save
五、NAT 规则配置
NAT 规则按序号从低到高匹配,一旦命中不再向下查找。
configure
# rule 50:10.99 访问 10.0.0.0/24(二级路由器 LAN)走 eth2
set nat source rule 50 outbound-interface 'eth2'
set nat source rule 50 source address '10.99.0.0/24'
set nat source rule 50 destination address '10.0.0.0/24'
set nat source rule 50 translation address 'masquerade'
# rule 60:10.99 访问 PVE 管理地址走 eth7
set nat source rule 60 outbound-interface 'eth7'
set nat source rule 60 source address '10.99.0.0/24'
set nat source rule 60 destination address '172.31.0.153/32'
set nat source rule 60 translation address 'masquerade'
# rule 70:代理上网走 pppoe0
set nat source rule 70 outbound-interface 'pppoe0'
set nat source rule 70 source address '100.64.27.51'
set nat source rule 70 translation address 'masquerade'
# rule 80:10.99 访问上游路由器管理界面走 eth2
set nat source rule 80 outbound-interface 'eth2'
set nat source rule 80 source address '10.99.0.0/24'
set nat source rule 80 destination address '192.168.1.0/24'
set nat source rule 80 translation address 'masquerade'
# rule 100:172.26 专用出口走 eth2(备用宽带)
set nat source rule 100 outbound-interface 'eth2'
set nat source rule 100 source address '172.26.0.0/16'
set nat source rule 100 translation address 'masquerade'
# rule 110:172.26 备用走 pppoe0(eth2 断开时自动切换)
set nat source rule 110 outbound-interface 'pppoe0'
set nat source rule 110 source address '172.26.0.0/16'
set nat source rule 110 translation address 'masquerade'
# rule 150:eth2 出口的兜底 NAT(pppoe0 断开时使用)
set nat source rule 150 outbound-interface 'eth2'
set nat source rule 150 source address '10.0.0.0/8'
set nat source rule 150 translation address 'masquerade'
# rule 200:所有内网主出口走 pppoe0
set nat source rule 200 outbound-interface 'pppoe0'
set nat source rule 200 source address '10.0.0.0/8'
set nat source rule 200 translation address 'masquerade'
# 端口转发(RDP 打洞)
set nat destination rule 5985 description 'RDP-via-Proxy'
set nat destination rule 5985 destination port '33890'
set nat destination rule 5985 inbound-interface 'pppoe0'
set nat destination rule 5985 protocol 'tcp'
set nat destination rule 5985 translation address '10.99.0.254'
set nat destination rule 5985 translation port '33890'
commit
save
排查技巧:如果修改 NAT 规则后网络不通,先用 sudo conntrack -F 清空连接跟踪表,让新规则立即对所有流量生效。旧的连接状态可能与新规则冲突,导致看似“规则正确但就是不工作”。
六、DHCP 服务配置
为每个网段启用 DHCP,注意不同网段分配不同的 DNS 服务器。
configure
# 10.99 网段(AP 终端,DNS 指向代理)
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 range 0 start '10.99.0.15'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 range 0 stop '10.99.0.254'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 default-router '10.99.0.1'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 name-server '100.64.27.51'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 name-server '119.29.29.29'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 lease '1200'
# 10.168 网段(主宽带虚拟机,DNS 指向内网 DNS 服务器)
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 range 0 start '10.168.0.100'
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 range 0 stop '10.168.254.254'
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 default-router '10.168.0.1'
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 name-server '10.71.7.43'
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 name-server '10.168.90.109'
set service dhcp-server shared-network-name LAN_VM1 subnet 10.168.0.0/16 lease '1200'
# 172.26 网段(备用宽带虚拟机,DNS 指向内网 DNS 服务器)
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 range 0 start '172.26.0.100'
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 range 0 stop '172.26.254.254'
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 default-router '172.26.0.1'
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 name-server '10.71.7.43'
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 name-server '10.168.90.109'
set service dhcp-server shared-network-name LAN_VM2 subnet 172.26.0.0/16 lease '1200'
commit
save
为重要设备绑定静态 IP(示例):
configure
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 static-mapping laptop mac-address '<DEVICE_MAC>'
set service dhcp-server shared-network-name LAN_AP subnet 10.99.0.0/24 static-mapping laptop ip-address '10.99.0.252'
commit
save
七、策略路由:Fake-IP 透明代理分流
7.1 原理
10.99 网段的设备 DNS 请求指向代理(100.64.27.51)。代理返回 198.18.0.0/16 段内的 Fake IP。设备访问 Fake IP 时,流量被策略路由 FAKEIP 匹配,强制走 table 100,下一跳指向代理。代理根据缓存中的映射关系,将请求转发到真实目标。
其他网段不使用此策略,即使解析出 Fake IP 也会因匹配不到路由而走默认路由,最终被公网丢弃——这是预期的隔离效果。
7.2 配置
configure
# 策略路由 FAKEIP:匹配目标为 198.18.0.0/16 的流量,扔进 table 100
set policy route FAKEIP rule 10 destination address '198.18.0.0/16'
set policy route FAKEIP rule 10 set table '100'
# 应用到 eth1(AP 网段入口)
set interfaces ethernet eth1 policy route FAKEIP
commit
save
7.3 已知陷阱:隐式 drop all 规则
这是本环境踩过的最隐蔽的坑。
VyOS 1.3 的策略路由(PBR)在未匹配任何显式规则时,默认行为是丢弃数据包,而非走正常转发。show firewall statistics 的 FAKEIP 段会显示一条 rule 1000000 action DROP,计数器持续增长。这条规则无法通过 delete policy route FAKEIP rule 1000000 删除,系统会报 Nothing to delete。
影响:从 eth1 进入的任何流量,只要目标不是 198.18.0.0/16,都会被丢弃。这会导致 10.99 网段的设备无法访问任何非代理目标(包括纯 IPv4 直连网站)。
当前规避方式:FAKEIP 的隐式 drop 尚未完全解决,但因为 DHCP 下发了备用 DNS(119.29.29.29),设备在代理不可达时会自动切换到直连 DNS,因此对日常使用影响有限。如果你需要彻底解决,建议考虑将代理部署为网关模式(TUN 设备),绕过 PBR 机制。
7.4 旁路由(OpenWrt)配置要点
旁路由 IP:100.64.27.51/32,网关:100.64.27.1。关闭 DHCP 服务,开启透明代理(redirect 或 tun 模式),必须开启 Fake-IP 缓存,否则 DNS 解析返回真实 IP 而非 198.18 段地址,策略路由无法命中。
八、防火墙与内网隔离
8.1 172.26 网段隔离
172.26 网段的虚拟机走备用宽带(eth2),出于安全考虑需要隔离:不允许访问任何内网网段,只允许访问指定的 DNS 服务器和外网。
configure
set firewall name BLOCK-WAN2-VM default-action drop
# 允许已建立/关联的连接回包
set firewall name BLOCK-WAN2-VM rule 1 action accept
set firewall name BLOCK-WAN2-VM rule 1 state established enable
set firewall name BLOCK-WAN2-VM rule 1 state related enable
# 允许 DHCP
set firewall name BLOCK-WAN2-VM rule 5 action accept
set firewall name BLOCK-WAN2-VM rule 5 protocol udp
set firewall name BLOCK-WAN2-VM rule 5 source port 68
set firewall name BLOCK-WAN2-VM rule 5 destination port 67
# 允许 DNS 查询到指定服务器
set firewall name BLOCK-WAN2-VM rule 25 action accept
set firewall name BLOCK-WAN2-VM rule 25 destination address '10.168.90.109/32'
set firewall name BLOCK-WAN2-VM rule 26 action accept
set firewall name BLOCK-WAN2-VM rule 26 destination address '10.71.7.43/32'
# 禁止访问内网各网段
set firewall name BLOCK-WAN2-VM rule 30 action drop
set firewall name BLOCK-WAN2-VM rule 30 destination address '10.168.0.0/16'
set firewall name BLOCK-WAN2-VM rule 40 action drop
set firewall name BLOCK-WAN2-VM rule 40 destination address '100.64.27.0/24'
set firewall name BLOCK-WAN2-VM rule 50 action drop
set firewall name BLOCK-WAN2-VM rule 50 destination address '172.31.0.1/32'
# 应用在 eth4(172.26 入口)
set interfaces ethernet eth4 firewall in name BLOCK-WAN2-VM
commit
save
排查技巧:遇到“单向通”或“部分网段不通”时,先用 show firewall statistics 查看各规则的计数器,确认是否有 drop 规则被命中。计数器在增长的那条规则就是丢包点。不要先怀疑路由或内核参数。
九、IPv6 公网配置
9.1 让 PPPoE 请求 IPv6 前缀并分配给 eth5
configure
set interfaces pppoe pppoe0 ipv6 address autoconf
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth5 address 1
set interfaces pppoe pppoe0 dhcpv6-options pd 0 length 56
# 开启 IPv6 转发
set system sysctl custom net.ipv6.conf.all.forwarding value 1
# eth5 自动获取 IPv6
set interfaces ethernet eth5 ipv6 address autoconf
# 路由通告(RA),让下游设备自动获取前缀
set service router-advert interface eth5 prefix ::/64
set service router-advert interface eth5 name-server '2400:3200::1'
set service router-advert interface eth5 name-server '2400:3200:baba::1'
commit
save
配置完成后,disconnect interface pppoe0 然后 connect interface pppoe0 重拨,eth5 应该获取到类似 2409:xxxx:xxxx:xxxx::1/64 的公网 IPv6 地址。后缀 ::1 固定,前缀由运营商动态分配。
9.2 常见故障:重拨后 IPv6 地址消失
根因:pppoe0 的 ipv6 address autoconf 被误删后,DHCPv6-PD 获取的前缀也会被撤销,eth5 的公网 IPv6 随之消失。只需重新配置上述命令并重拨即可。
十、性能优化
10.1 TCP BBR 拥塞控制
configure
set system sysctl custom net.core.default_qdisc value 'fq'
set system sysctl custom net.ipv4.tcp_congestion_control value 'bbr'
set system sysctl custom net.core.rmem_max value '134217728'
set system sysctl custom net.core.wmem_max value '134217728'
set system sysctl custom net.ipv4.tcp_rmem value '4096 87380 134217728'
set system sysctl custom net.ipv4.tcp_wmem value '4096 65536 134217728'
commit
save
10.2 网卡 GRO 开启
编辑 /config/scripts/vyos-postconfig-bootup.script(此文件在 VyOS 启动后自动执行):
#!/bin/sh
sleep 5
for iface in eth0 eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8; do
ethtool -K $iface tso on gso on gro on 2>/dev/null
done
赋予执行权限:
chmod +x /config/scripts/vyos-postconfig-bootup.script
十一、典型故障排查方法论
11.1 分层排查原则
遇到网络不通时,不要在同一层反复横跳。按以下顺序逐层验证:
- 应用层:目标服务是否正常运行?(
ss -tulnp) - 路由层:源主机的路由表是否正确?(
ip route get 目标IP) - 网关转发层:VyOS 的路由表是否正确?(
show ip route 目标IP) - 策略路由层:是否有 PBR 规则干扰?(
show policy route) - 防火墙层:是否有规则丢包?(
show firewall statistics,看计数器) - 内核层:rp_filter 是否在静默丢包?(
sysctl net.ipv4.conf.*.rp_filter)
11.2 最有用的排查命令
# 查看防火墙各规则命中情况(计数器在涨的规则就是丢包点)
show firewall statistics
# 查看策略路由命中情况
show policy route
# 查看 NAT 规则
show nat source rules
# 查看 DHCP 租约
show dhcp server leases
# 清空连接跟踪表(修改 NAT/防火墙后必做)
sudo conntrack -F
# 双端抓包定位丢包点
sudo tcpdump -i any -n 'host 源IP and host 目标IP' -c 20
11.3 最常踩的坑总结
- VyOS 1.3 PBR 隐式 drop all:任何策略路由默认丢弃不匹配的流量。
show firewall statistics确认后,要么接受,要么换网关模式代理。 - rp_filter 静默丢包:内核默认会丢弃“来源接口与回程接口不一致”的数据包。确认
sysctl net.ipv4.conf.all.rp_filter=0。 - conntrack 表脏数据:修改 NAT 或防火墙规则后必须
sudo conntrack -F。 - MAC 地址漂移:PVE 端虚拟网卡的 MAC 必须在
qm set时固定,VyOS 端用hw-id绑定,双重保险。 - PVE 的
.link文件不能删:删除后网卡名变为 enpXsX,与/etc/network/interfaces不匹配,系统进入 emergency mode。
十二、配置备份与恢复
12.1 VyOS 配置备份
show configuration commands > /config/vyos-backup-$(date +%Y%m%d).txt
将文件通过 SCP 拉到本地保存。恢复时,将备份文件中的所有命令粘贴进 VyOS 的 configure 模式,执行 commit; save 即可。
12.2 PVE 配置备份
/etc/network/interfaces:宿主网络配置/etc/pve/qemu-server/:虚拟机配置文件/etc/systemd/network/*.link:网卡名称固定文件
以上。
全文涵盖从硬件直通到双宽带主备、透明代理、IPv6、防火墙隔离的完整搭建过程。所有配置均已在实际环境运行验证,稳定可靠。