Strongswan VPN本地机器流量转发及分流配置咨询
Strongswan VPN本地机器流量转发及分流配置咨询
看起来你已经摸到门道了——开了IP转发,连好了Strongswan的IKEv2连接,就是卡在子网IP分配和流量分流这俩坎儿上对吧?别慌,咱们一步一步给你理清楚怎么弄:
一、先搞定VPN服务器端的子网IP分配(让本地机器拿到适配10.0.0.x的IP)
你得先让本地机器拿到属于10.0.0.x私有子网段的IP,不然就算连了VPN,子网里的其他服务器也不认你的IP:
- 登录到你的VPN服务器(就是那个用eth0做公网入口的VPS),打开
/etc/strongswan/ipsec.conf,找到你那个IKEv2的连接配置段(应该是conn ikev2-rw那段),加上或者确认有这些配置:leftsubnet=10.0.0.0/24 # 只转发私有子网的流量,后面分流要用 rightsubnet=10.0.0.0/24 rightsourceip=10.0.0.100-10.0.0.150 # 这个IP池要在你的10.0.0.x子网里,别和现有VPS的IP重复 - 然后扫一眼
/etc/strongswan/ipsec.secrets,确保认证相关的配置(PSK或者证书)是对的——你已经能连上VPN,这步应该没问题,保险起见确认下就行 - 最后重启Strongswan服务让配置生效:
sudo systemctl restart strongswan-starter
二、把VPN服务器的IP转发和路由配置坐实
你已经临时开了sysctl net.ipv4.ip_forward=1,但这个重启就会失效,得把它设成永久的:
- 编辑
/etc/sysctl.conf,找到net.ipv4.ip_forward=1这一行(没有的话就加上),把前面的注释符号#去掉,然后执行sudo sysctl -p让配置立刻生效 - 接下来要让私有子网里的VPS能把返回的流量发回给你的本地机器,得加个NAT规则:
在VPN服务器上执行这条命令:
这里的sudo iptables -t nat -A POSTROUTING -s 10.0.0.100/25 -o eth1 -j MASQUERADE10.0.0.100/25要对应你刚才设置的IP池范围,这样本地机器的流量会被伪装成VPN服务器eth1的IP,其他VPS就能正常回应了
三、配置流量分流(本地机器同时上公网+访问私有子网)
这个就是你说的“split traffic”,核心就是只把10.0.0.x的流量导去VPN,其他流量还走本地网络:
服务器端配置
刚才在ipsec.conf里我们已经把leftsubnet设成了10.0.0.0/24,而不是0.0.0.0/0——这个很关键,要是设成0.0.0.0/0,所有流量都会走VPN,就没法同时上公网了
本地机器配置
- 连接VPN后,先执行
ip route show看看路由表,正常情况下会自动多一条10.0.0.0/24的路由,指向VPN隧道设备(比如ipsec0) - 如果没自动加上,就手动补一条:
要是不知道网关,就看VPN服务器eth1的IP,那个就是子网网关sudo ip route add 10.0.0.0/24 via <你的VPN分配的本地IP的网关,比如10.0.0.1> dev ipsec0 - 最后确认下本地的默认路由还是指向你的本地路由器IP,这样除了10.0.0.x的流量,其他都走本地公网
四、验证配置是否生效
- 本地机器上执行
sudo ipsec status,确认Security Associations是1 up的状态 - 尝试ping私有子网里的任意一台VPS(比如
ping 10.0.0.2),能通就说明转发没问题 - 同时打开浏览器刷个公网网站,能正常访问就说明分流生效了
备注:内容来源于stack exchange,提问作者digitalcreative.tech




