要让服务器只走加密隧道回传全部网络流量,需先确保隧道稳定运行,再将默认路由指向隧道接口并用防火墙封禁物理出口的非隧道流量,最后保留ssh等管理通道防锁死。

要让服务器只走加密隧道回传全部网络流量,核心是把默认路由指向隧道接口,并切断明文出口。这不是加个代理或开个端口的事,而是重构整台机器的网络出口路径。
确认隧道已稳定运行
先确保你用的是 WireGuard、IPsec 或 GRE+IPsec 这类内核级隧道,且两端 已互通、无丢包、能持续 ping 通对端隧道 IP。比如 WireGuard 中执行 wg show 应显示 latest handshake 在几分钟内,transfer 字段持续增长。若隧道本身断连频繁,强行切换默认路由会导致全网失联。
接管默认路由,强制所有出向流量经隧道
在服务器上执行以下操作(以 WireGuard 为例,隧道接口名为 wg0,对端隧道 IP 为 10.8.0.1):
- 临时生效:运行
sudo ip route replace default via 10.8.0.1 dev wg0 - 永久生效:编辑
/etc/wireguard/wg0.conf,在[Interface]段末尾添加一行:PostUp = ip route replace default via 10.8.0.1 dev wg0PreDown = ip route del default via 10.8.0.1 dev wg0 - 验证:执行
ip route show default,输出应为default via 10.8.0.1 dev wg0
封禁原始物理出口的非隧道流量
仅改路由还不够——攻击者或误配置仍可能绕过隧道直连外网。需用防火墙阻断物理接口(如 ens3)上的非隧道出向连接:
- 使用
nftables(推荐):sudo nft add rule inet filter output oifname "ens3" ip daddr != 10.8.0.0/24 counter drop
这条规则表示:所有从ens3发出、目标地址不是隧道网段(10.8.0.0/24)的包,全部丢弃并计数。 - 若用
firewalld,可新建富规则:sudo firewall-cmd --permanent --add-rich-rule='rule out-interface ens3 destination address="!10.8.0.0/24" drop'sudo firewall-cmd --reload
保留关键管理通道防锁死
全量接管后,SSH 登录、系统更新等都依赖隧道。务必提前验证隧道可用性,并留一条逃生路径:
- 在修改默认路由前,用
screen或tmux开一个会话,运行:while sleep 30; do ip route get 1.1.1.1 | grep -q wg0 || echo "$(date): tunnel down!" && reboot -f; done - 确保 SSH 服务监听在隧道 IP(如
10.8.0.2)或所有接口(0.0.0.0),且防火墙允许来自隧道网段的连接; - 不建议依赖云平台的 VNC 或串口控制台作为常规手段——响应慢、延迟高,仅作最后兜底。










