Cavno.
Life & Skills · AI

Linode Cloud Firewall 与 Ubuntu 24.04 IPv4-only 完整实施指南

合并云防火墙、配置备份、sysctl、systemd-networkd、Network Helper、双 SSH 会话、代理浏览器验收与 Lish Console 回滚,建立完整的 IPv4-only 实施流程。

← 返回 AI 栏目
FIREWALL · NETWORKD · SYSCTL · SSH

双层阻断,完整验收

先以 Cloud Firewall 阻断 IPv6,再由 sysctl 与 systemd-networkd 固化 IPv4-only;全过程保留第二路 SSH、Lish Console、备份和回滚。

01Cloud Firewall→02备份与双 SSH→03sysctl + networkd→04浏览器与重启验收

目标:禁止 Linode 的 IPv6 入站、出站和 Ubuntu 系统 IPv6,同时保留 FinalShell/SSH 的 IPv4 访问,并确保代理浏览器继续通过 VPS 公网 IPv4 正常访问互联网。

01一、实施目标与边界

最终状态应同时满足:

  • Linode Cloud Firewall 不接受 IPv6 入站,也不允许 IPv6 出站。
  • Ubuntu 的 all、default、lo 和 eth0 均禁用 IPv6。
  • eth0 不再通过 Router Advertisement 或自动配置取得 IPv6。
  • SSH 只通过 VPS 公网 IPv4 连接,端口保持实际 SSH 端口。
  • VPS 的 IPv4 地址、IPv4 默认路由和 systemd-networkd 保持正常。
  • 代理浏览器出口显示 VPS 公网 IPv4,不出现可用公网 IPv6,也不暴露本地真实公网 IP。

本文默认 SSH 端口为 22。如果实际端口不是 22,下文所有 22 均替换为实际端口。

02二、操作前建立安全绳

  1. 登录 Linode Cloud Manager,确认可以打开该主机的 Lish Console。
  2. 保持当前 FinalShell/SSH 会话不要关闭。
  3. 在 Linode Cloud Manager 中确认 VPS 的公网 IPv4 地址。
  4. 在 FinalShell 中直接填写该公网 IPv4,不使用可能解析出 AAAA 记录的域名,也不使用 IPv6 地址。
  5. 再打开一个 FinalShell 窗口,使用 VPS 公网 IPv4 登录。
  6. 两个 FinalShell 窗口都能登录后再继续。

1. 执行前置检查

执行:

Terminal · Bash
sudo ss -lntp4 | grep ':22 '
systemctl is-active systemd-networkd
sudo test -f /etc/systemd/network/05-eth0.network && echo OK

必须看到:

配置 / 预期结果
TCP 22 正在监听
active
OK

如果 SSH 的 IPv4 监听、systemd-networkd 状态或 /etc/systemd/network/05-eth0.network 任意一项不符合预期,停止操作,先解决该问题。

03三、配置 Linode Cloud Firewall

进入:

Cloud Manager → Firewalls → 选择已绑定该 Linode 或其 Public Interface 的 Firewall → Rules

1. Inbound 最终配置

默认策略:

配置 / 预期结果
Inbound Policy: DROP

只保留以下必要规则:

顺序LabelProtocolPortsSourcesAction
1allow-ssh-ipv4TCP22All IPv4ACCEPT

要求:

  • 不添加 IPv6 来源。
  • 不添加 UDP 入站规则。
  • 不增加 Inbound 443、53 或其他与本次目标无关的端口。
  • 如果已有允许 SSH 的 IPv6 规则,删除或禁用。
  • 如果确认本地公网 IPv4 长期固定,可在完成全部验证后把 All IPv4 收紧为 你的公网IPv4/32。

2. Outbound 最终配置

默认策略:

配置 / 预期结果
Outbound Policy: ACCEPT

把以下四条规则放在所有 Outbound 规则的最上方:

顺序LabelProtocolPortsDestinationsAction
1block-ipv6-tcpTCPAll PortsAll IPv6DROP
2block-ipv6-udpUDPAll PortsAll IPv6DROP
3block-ipv6-icmpICMP不填写All IPv6DROP
4block-ipv6-ipencapIPENCAP不填写All IPv6DROP

要求:

  • 删除或下移位于这四条规则之前、且会允许 IPv6 的冲突规则。
  • 不要把 Outbound Policy 设为 DROP,除非已经另外建立完整的 IPv4 放行规则。
  • 确认 Firewall 状态为 Enabled。
  • 确认 Firewall 已绑定到目标 Linode;如果主机使用 Linode Interfaces,确认绑定到对应的 Public Interface。
  • 点击 Save Changes。

3. 立即验证 IPv4 SSH

不要关闭原 SSH 会话。另开一个 FinalShell 窗口,使用 VPS 公网 IPv4 建立新连接:

配置 / 预期结果
主机:VPS 公网 IPv4
协议:SSH
端口:22 或实际 SSH 端口

只有新窗口能够正常登录后,才继续修改 Ubuntu。

04四、备份现有网络配置

整段复制执行:

Terminal · Bash
fix_stamp=$(date +%Y%m%d-%H%M%S)
fix_backup="/root/ipv6-fix-backup-$fix_stamp"
sudo mkdir -p "$fix_backup"
sudo cp -a /etc/systemd/network/05-eth0.network "$fix_backup/"

if [ -f /etc/sysctl.d/99-disable-ipv6.conf ]; then
  sudo cp -a /etc/sysctl.d/99-disable-ipv6.conf "$fix_backup/"
fi

if [ -f /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf ]; then
  sudo mkdir -p "$fix_backup/05-eth0.network.d"
  sudo cp -a /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf "$fix_backup/05-eth0.network.d/"
fi

echo "$fix_backup"
sudo ls -la "$fix_backup"

记下屏幕显示的 /root/ipv6-fix-backup-日期时间 目录。后续发生异常时,这个目录用于恢复修改前的配置。

05五、写入 Ubuntu IPv6 禁用配置

整段复制执行:

Terminal · Bash
sudo install -d -m 0755 /etc/sysctl.d

sudo tee /etc/sysctl.d/99-disable-ipv6.conf >/dev/null <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.eth0.accept_ra = 0
net.ipv6.conf.eth0.disable_ipv6 = 1
EOF

前三项从系统全局、默认接口和回环接口禁用 IPv6;后三项专门阻止 eth0 自动配置、接受 RA 和继续启用 IPv6。

06六、禁止 eth0 自动取得 IPv6

整段复制执行:

Terminal · Bash
sudo install -d -m 0755 /etc/systemd/network/05-eth0.network.d

sudo tee /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf >/dev/null <<'EOF'
[Network]
IPv6AcceptRA=no
LinkLocalAddressing=ipv4
EOF

sudo systemd-analyze cat-config systemd/network/05-eth0.network
sudo networkctl reload
sudo journalctl -u systemd-networkd --no-pager -n 30

确认输出中存在:

配置 / 预期结果
IPv6AcceptRA=no
LinkLocalAddressing=ipv4

不要通过 SSH 执行:

Terminal · Bash
networkctl reconfigure eth0

该命令可能立即重配正在承载 SSH 的网卡,增加远程断联风险。这里只执行 networkctl reload,把完整应用留到计划内重启。

07七、立即应用并验证 VPS

1. 应用配置

按顺序执行:

Terminal · Bash
sudo sysctl --system
sudo sysctl -w net.ipv6.conf.eth0.autoconf=0
sudo sysctl -w net.ipv6.conf.eth0.accept_ra=0
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

2. 检查 sysctl、地址与路由

执行:

Terminal · Bash
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
sysctl net.ipv6.conf.lo.disable_ipv6
sysctl net.ipv6.conf.eth0.disable_ipv6
sysctl net.ipv6.conf.eth0.autoconf
sysctl net.ipv6.conf.eth0.accept_ra
ip -6 address show
ip -6 route show
ip -4 address show dev eth0
ip -4 route show

应满足:

配置 / 预期结果
all/default/lo/eth0 disable_ipv6 = 1
eth0 autoconf = 0
eth0 accept_ra = 0
ip -6 address 无可用地址
ip -6 route 无可用路由
IPv4 地址和默认路由正常

3. 检查 IPv4 与 IPv6 出口

执行:

Terminal · Bash
curl -4 --connect-timeout 10 https://ifconfig.co
curl -6 --connect-timeout 5 https://ifconfig.co

curl -4 -sS -o /dev/null -w 'HTTP=%{http_code}\n' --connect-timeout 10 --max-time 20 https://www.google.com/generate_204
curl -6 -sS -o /dev/null -w 'HTTP=%{http_code}\n' --connect-timeout 5 --max-time 10 https://www.google.com/generate_204

合格结果:

配置 / 预期结果
ifconfig.co 的 IPv4 测试返回 VPS 公网 IPv4
ifconfig.co 的 IPv6 测试连接失败
IPv4 generate_204 测试返回 HTTP=204
IPv6 generate_204 测试连接失败

4. 再次测试 SSH

保持当前会话不关闭,再开一个 FinalShell 窗口,使用 VPS 公网 IPv4 登录。新窗口登录成功后再继续。

08八、验证代理与指纹浏览器

  1. 关闭使用该 VPS 代理的浏览器 Profile。
  2. 重新打开该 Profile。
  3. 执行代理检测。
  4. 依次打开:
  • https://www.google.com/
  • https://www.tiktok.com/
  • https://www.browserscan.net/
  • https://test-ipv6.com/

必须满足:

配置 / 预期结果
Google 可以打开
TikTok 可以打开
出口显示 VPS 公网 IPv4
没有可用公网 IPv6
WebRTC 不显示本地真实公网 IP

09九、关闭 VPS 的 Network Helper

只有在 Cloud Firewall、Ubuntu 即时验证、第二路 SSH 和代理浏览器全部通过后,才执行本节。

1. 使用 Linode Interfaces

  1. 保持 Lish Console 打开。
  2. 在 Cloud Manager 关闭 VPS。
  3. 打开:VPS → Network → Interface Settings。
  4. 关闭 Enable Network Helper。
  5. 点击 Save。
  6. 启动 VPS。

2. 使用 Legacy Configuration Profile

  1. 打开:VPS → Configurations → Edit。
  2. 找到 Filesystem/Boot Helpers。
  3. 关闭 Auto-configure networking。
  4. 点击 Save Changes。
  5. 重启 VPS。

只关闭当前 VPS 自己的 Network Helper,不修改账户全局设置。

10十、重启后最终验收

确认 Lish Console 可用后执行:

Terminal · Bash
sudo reboot

主机启动后,用 VPS 公网 IPv4 登录并执行:

Terminal · Bash
systemctl is-active systemd-networkd
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
sysctl net.ipv6.conf.lo.disable_ipv6
sysctl net.ipv6.conf.eth0.disable_ipv6
sysctl net.ipv6.conf.eth0.autoconf
sysctl net.ipv6.conf.eth0.accept_ra
ip -6 address show
ip -6 route show
ip -4 address show dev eth0
ip -4 route show
curl -4 --connect-timeout 10 https://ifconfig.co
curl -6 --connect-timeout 5 https://ifconfig.co
curl -4 -sS -o /dev/null -w 'HTTP=%{http_code}\n' --connect-timeout 10 --max-time 20 https://www.google.com/generate_204
curl -6 -sS -o /dev/null -w 'HTTP=%{http_code}\n' --connect-timeout 5 --max-time 10 https://www.google.com/generate_204

最终合格标准:

检查项合格结果
systemd-networkdactive
all/default/lo/eth0 disable_ipv6全部为 1
eth0 autoconf0
eth0 accept_ra0
IPv6 地址与路由无可用地址、无可用路由
IPv4 地址与默认路由正常
IPv4 出口返回 VPS 公网 IPv4,generate_204 返回 HTTP=204
IPv6 出口连接失败
FinalShell使用 VPS 公网 IPv4正常登录
代理浏览器Google、TikTok 正常,出口为 VPS 公网 IPv4,无可用公网 IPv6

11十一、防止 SSH 被锁死的全过程规则

  1. 先保存 Cloud Firewall 的 IPv4 SSH 入站规则,再修改 Ubuntu。
  2. 全程保留一个已连接的 SSH 会话,并用第二个窗口测试新连接。
  3. FinalShell 直接使用 VPS 公网 IPv4,不使用域名或 IPv6 地址。
  4. 未确认本地公网 IPv4 固定前,SSH 来源保持 All IPv4。
  5. 不要把 Inbound Policy 设为 DROP 后却不配置 TCP 22 / IPv4 / ACCEPT。
  6. 不要把 Outbound Policy 设为 DROP,除非已建立完整的 IPv4 放行规则。
  7. 不要通过 SSH 执行 networkctl reconfigure eth0。
  8. 应用配置和重启前确认 Lish Console 可用,并记住备份目录。

12十二、SSH 无法登录时回滚

通过 Linode Cloud Manager 打开 Lish Console,执行:

Terminal · Bash
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.eth0.autoconf=1
sudo sysctl -w net.ipv6.conf.eth0.accept_ra=1

sudo test -f /etc/sysctl.d/99-disable-ipv6.conf && \
  sudo mv /etc/sysctl.d/99-disable-ipv6.conf /etc/sysctl.d/99-disable-ipv6.conf.disabled

sudo test -f /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf && \
  sudo mv /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf \
  /etc/systemd/network/05-eth0.network.d/90-disable-ipv6.conf.disabled

如果需要恢复备份文件,先把下面的路径替换为第四节记录的实际备份目录,再执行:

Terminal · Bash
fix_backup="/root/ipv6-fix-backup-日期时间"
sudo cp -a "$fix_backup/05-eth0.network" /etc/systemd/network/05-eth0.network

if [ -f "$fix_backup/99-disable-ipv6.conf" ]; then
  sudo cp -a "$fix_backup/99-disable-ipv6.conf" /etc/sysctl.d/99-disable-ipv6.conf
fi

然后在 Cloud Manager 中:

  1. 检查 Cloud Firewall,恢复 Inbound Policy: DROP 与 TCP 22 / All IPv4 / ACCEPT。
  2. 如果此前关闭了 Network Helper,关闭 VPS 并重新启用当前 VPS 的 Network Helper。
  3. 保存并启动 VPS。
  4. 使用 VPS 公网 IPv4重新登录。
本文依据用户提供的 Markdown 附件完整排版。涉及防火墙、网络栈与重启的操作具有断联风险;执行前应保留现有 SSH 会话并确认 Lish Console 可用。