配置特定子网通过本地节点路由的技术咨询
没问题,这个需求完全可以实现,咱们分几个步骤来配置,确保TWENTY访问目标子网时走TEN,其他流量正常走默认网关,同时保证返回流量能正确回到TWENTY:
步骤1:为TWENTY添加静态路由规则
首先在TWENTY上,咱们要给目标子网172.16.16.16/30指定专属路由,让它的流量都发往TEN(10.0.0.10):
- 临时生效的命令(重启后会失效):
ip route add 172.16.16.16/30 via 10.0.0.10 dev <你的网卡名称>
注意:把<你的网卡名称>替换成TWENTY实际用的网卡,比如ens33或eth0,可以用ip addr命令查看
- 永久生效配置(Ubuntu用Netplan管理网络):
编辑Netplan的配置文件(通常是/etc/netplan/00-installer-config.yaml,如果文件名不同请自行调整),在网卡配置下添加路由规则:
network: ethernets: ens33: # 这里替换成你的网卡名称 addresses: [10.0.0.20/24] gateway4: 10.0.0.1 routes: - to: 172.16.16.16/30 via: 10.0.0.10 version: 2
保存后执行以下命令生效:
netplan apply
步骤2:开启TEN的IP转发功能
TEN需要具备转发流量的能力,才能把TWENTY发来的目标子网流量转到VPN,再把返回流量发回TWENTY:
- 临时开启转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久开启转发:
编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号#,然后执行以下命令生效:
sysctl -p
步骤3:调整StrongSwan配置,允许转发TWENTY的流量
因为你的TEN已经配置了site-to-site VPN,但默认可能只允许TEN自身的流量通过VPN,所以需要修改StrongSwan的配置,让它接受来自TWENTY所在子网的流量:
编辑StrongSwan的主配置文件/etc/ipsec.conf,找到对应远程站点的连接配置块(比如命名为remote-site),修改leftsubnet参数,把TWENTY所在的本地子网(假设是10.0.0.0/24)加进去:
conn remote-site left=10.0.0.10 leftsubnet=10.0.0.0/24 # 替换成你的本地实际子网,比如10.0.0.0/24 right=<远程VPN网关IP> # 保留你原来的远程网关IP rightsubnet=172.16.16.16/30 # 保留原来的目标子网 # 其他原有配置(比如authby、ike、esp等)保持不变
修改完成后重启StrongSwan服务:
systemctl restart strongswan
步骤4:(可选)配置源NAT(如果远程站点没有路由到本地子网)
如果远程站点的VPN配置里没有添加到10.0.0.0/24的路由,那么返回流量可能找不到回TWENTY的路径,这时候需要在TEN上配置源NAT,让来自TWENTY的流量看起来是从TEN发出的:
执行以下iptables命令:
iptables -t nat -A POSTROUTING -s 10.0.0.20/32 -d 172.16.16.16/30 -o <VPN接口> -j MASQUERADE
注意:把<VPN接口>替换成TEN上的VPN虚拟接口,比如ipsec0,可以用ip addr命令查看
如果要让这个规则永久生效,可以安装iptables-persistent工具保存规则:
apt install iptables-persistent
测试配置
完成以上步骤后,在TWENTY上测试目标子网的连通性:
ping 172.16.16.16 # 替换成目标子网内的实际可达IP traceroute 172.16.16.16 # 查看路由路径,第一跳应该是10.0.0.10
如果ping通且路由正确,说明配置生效了,此时TWENTY访问172.16.16.16/30的流量会走TEN的VPN,其他流量依然使用默认网关10.0.0.1。
备注:内容来源于stack exchange,提问作者0s r Fun

