Linux服务器间安全隧道通信首选WireGuard,因其轻量、高性能、内核原生支持且配置简洁;SSH隧道适合临时TCP端口转发,IPSec适用于强合规站点互联,GRE/VXLAN需叠加加密;部署需确保密钥安全、防火墙放行、IP转发启用及路由正确。

实现 Linux 服务器间的安全网络隧道通信,核心在于选择合适的技术方案并确保端到端加密、身份认证与路由可达。不依赖专用硬件,纯软件配置即可完成,关键在协议选型、密钥管理与网络路径连通性。
选对隧道类型:按场景匹配协议
不同需求对应不同隧道机制:
-
SSH 隧道:适合临时访问、数据库或管理端口转发,无需额外服务,自带加密和认证,命令简洁(如
ssh -L 8080:10.0.1.5:80 user@server-b);但只支持 TCP,不适合全网段互通。 -
WireGuard:轻量、高性能,适合长期稳定互联(如跨云 VPC 互通),配置集中(单个
/etc/wireguard/wg0.conf),密钥交换快,内核原生支持,推荐用于生产环境。 - IPSec(strongSwan):提供网络层完整加密,支持隧道模式(封装整个 IP 包),适合站点到站点(Site-to-Site)部署,满足金融、政务等强合规要求,但配置较复杂。
- GRE / VXLAN:本身不加密,仅做封装,必须叠加 IPsec 或置于可信内网使用;VXLAN 更适合虚拟化集群二层打通,GRE 适合简单路由互通。
WireGuard 快速安全部署(推荐首选)
以两台服务器 A(192.168.1.100)和 B(192.168.1.101)建立加密隧道为例:
- 双方执行:
sudo apt install wireguard(Debian/Ubuntu)或sudo yum install wireguard-tools(RHEL/CentOS) - 生成密钥对:
wg genkey | sudo tee /etc/wireguard/private.key && wg pubkey < /etc/wireguard/private.key | sudo tee /etc/wireguard/public.key - A 的
/etc/wireguard/wg0.conf:[Interface] PrivateKey = <A的私钥> Address = 10.100.0.1/24 ListenPort = 51820 <p>[Peer] PublicKey = <B的公钥> AllowedIPs = 10.100.0.2/32, 10.0.2.0/24 # 允许访问B的隧道IP及B侧内网 Endpoint = 192.168.1.101:51820 PersistentKeepalive = 25
- B 的配置中互换
Address和Endpoint,AllowedIPs改为10.100.0.1/32, 10.0.1.0/24 - 启用:
sudo wg-quick up wg0,开机自启:sudo systemctl enable wg-quick@wg0
加固与运维要点
安全不是配置完就结束,需持续保障:
- 防火墙放行必要端口:WireGuard 默认 UDP 51820;SSH 隧道需开放 22;IPSec 需放行 UDP 500/4500
- 禁用 root SSH 登录,强制使用密钥认证;WireGuard 仅允许指定公钥通信,天然拒绝未授权节点
- 启用内核转发:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p(隧道需路由时必需) - 定期轮换密钥(WireGuard 可热更新,替换
PublicKey后 reload 即可) - 用
wg show查看连接状态、传输字节与最近握手时间,异常断连可快速定位
验证与排错提示
确认隧道生效,分三步验证:
- 隧道接口是否 UP:
ip addr show wg0应显示分配的10.100.0.x地址且状态为UP - 能否 ping 通对端隧道地址:
ping 10.100.0.2(A 测 B) - 能否访问对端内网资源:
curl http://10.0.2.10(假设该地址在 B 的内网中) - 若不通,检查:
sudo tcpdump -i wg0 icmp看是否有包进出;sudo wg show是否显示latest handshake时间正常;路由表是否含10.0.2.0/24 via 10.100.0.2 dev wg0


















