MENU

Openwrt L2TP VPN 实现按目的IP分流

April 25, 2022 • Read: 10350 • 随心笔记

需求

疫情隔离在家办公,难免需要连接VPN回到公司内网中处理各种事情;但是呢,一旦连接VPN之后会导致我本地的网络分流全部失效,同时所有网络会中断一次,随之而来的就是各种SSH终端全部断开,这种局面让我非常难受。

所以有什么办法,能让我在家能够无感连接公司网络,同时不影响我的其它分流呢?小米路由器自带有个VPN分流给了我思路,既然它能做到,那么我相信Openwrt 一样能做到。

设备工具

  • 一台软路由设备(已刷LEDE)
  • VPN服务器
  • 一个会思考的脑袋

流程方法

VPN接口添加

按照正常流程,给自己的路由设备添加一个VPN接口,添加过程中 高级设置->使用默认网关 这里务必取消,不然可能会导致连接路由器的所有设备没有网(这里是个巨坑,直接导致重刷路由器),如下图:
phpjN8Oqq.png

这里记录一下VPN接口名称:HW

为什么会导致没网呢?我请教了公司的工程师,回答如下:

php1rY3iy.png

大概意思是:如果不取消,会默认添加一条路由让全部流量走VPN,但是呢,因为流量接口发包的时候流量没有经过NAT处理,回包的时候因为来源IP是错的,导致无法正常回包而断网。

添加静态路由

路径:lede后台 -> 网络 -> 静态路由

php4ekxx4.png

这两条路由的含义是:我希望 192.168.114.0/24 192.168.222.0/24 这两段IP范围全部走VPN,前面的HW是接口名称;大家举一反三。

添加NAT规则

执行命令:iptables -t nat -I POSTROUTING -o l2tp-HW -j MASQUERADE,其中的l2tp-HW是VPN接口名称,执行命令ifconfig能够看到。

路径:lede后台 -> 网络 -> 防火墙 -> 自定义规则,将刚才的命令追加到最后,使以后每次重启依然生效。

该动作就是解决前面提到因为NAT无法回包问题。

防火墙添加接口

路径:lede后台 -> 网络 -> 防火墙 -> 基本设置 -> 区域;将刚才添加的VPN接口添加进WAN口,不然路由器下面的设备无法生效。

phppnhFWv.png
phpmYYHEC.png

结尾

本文记录的比较草率,感谢公司工程师同事的帮助,非常感谢~