通过nmcli配置SSH隧道需结合NetworkManager的VPN插件特性,以下为实战经验与挑战分析:
核心步骤
- 安装networkmanager-ssh插件(部分发行版需源码编译)
- 创建SSH隧道配置:
nmcli con add type vpn vpn-type ssh \ con-name "prod-tunnel" \ vpn.data "remote=bastion.example.com, local_port=2222, remote_port=22, tunnel_user=admin"
- 密钥处理:使用ssh-agent加载密钥环,避免密码明文存储
- 动态路由配置:通过nmcli connection modify添加ipv4.routes覆盖目标网段
性能调优参数
- 设置TCPKeepAlive=yes防止中间路由超时
- 配置Compression=delayed减少带宽消耗
- 添加ServerAliveInterval 60维持连接状态
典型故障场景
- 多跳隧道MTU不匹配:通过ip link set dev tun0 mtu 1400分段调整
- 企业代理拦截:改用443端口并启用ssh -N -T绕过检测
- systemd-resolved冲突:在NetworkManager.conf禁用dns=systemd-resolved
监控方案
nmcli -f GENERAL-STATE,TUNNEL-STATUS con show prod-tunnel
journalctl -u NetworkManager --grep="vpn-ssh"
高可用实现 配置多个备份连接,使用nmcli con up id backup-tunnel触发切换,结合Keepalived实现VIP漂移。实际生产环境中需注意SSH连接状态与VRRP的联动检测。