配置地址走指定网卡
背景
由于公司提供的vpn属于 L2TP 协议,为二层隧道协议,通过路由表控制,要想实现访问公司服务,最简单的就是将默认路由配置成 vpn
的网关。(通过VPN连接发送所有流量)
说明:
- 通常vpn会增加指定的私有网段的转发,如果公司内部的服务都是私网地址,一般不需要处理
- 当有些公司的服务配置的是公网地址,但是该地址通过ip白名单形式,限制非公司出口ip访问,就可以按照本教材处理
- 本教程本质是通过 ip route 配置特定路由,所以也可以解决多网卡下,需要转发指定的地址到指定网卡的场景
- 本文档基于macos系统,其他系统思路类似
在路由表上的效果就是在最上面会添加一条默认路由
1 | $ netstat -nr |
但是通常我们并不是想要使用vpn转发所有的流量,一是访问非公司的网页时,速度会受公司的统一带宽影响,二是google之类的高级网站,需要使用各自的神秘力量访问,走公司网络时,则无法正常访问了。
那我们如何实现指定的地址走公司的网络,其他的地址还是走默认的网络呢。
方案1
其实方案也很简单,就是在路由层面,自己修改路由表,达成能自定义路由
第一步
取消转发所有流量,可以看到vpn已经不是优先级最高的
1 | $ netstat -nr |
第二步
添加指定的路由规则,比如我们要让 https://about.gitlab.com 走vpn网络,首先获取该域名的ip地址
1 | $ dig about.gitlab.com |
然后找到vpn的网关地址
然后将地址添加到对应的网关下 192.168.199.195
1 | sudo route add 151.101.66.49 192.168.199.195 |
这时候 https://about.gitlab.com 就会走公司网络了,其他没有配置的仍然走原先的网络.
说明
- Route 命令添加的路由重启之后会失效,若需要持久化需要使用("xxx"是对应的网络连接,macos
下对网络连接的命名)networksetup -setadditionalroutes xxx 151.101.66.49 255.255.255.255 192.168.199.195
- vpn的网关地址可能会在重新连接更新,也是需要重新配置
- 如果域名的 dns 解析地址更换了,也是需要重新配置
总结: 不推荐使用手动配置处理该场景,因为经常需要重新配置。所以理想情况就是,启动vpn之后,自动添加所需要路由,重连会动态修改,并且能够支持dns识别。请看方案2
方案2
Github 项目 https://github.com/attson/netcatcher 实现当对应的 network interface 连接时,自动添加相关的路由
第一步
Macos 请注意 darwin_amd64 和 darwin_arm64 选择
1 | curl -s https://raw.githubusercontent.com/attson/netcatcher/main/install/darwin.sh | netcatcher_VERSION=v0.2.0 netcatcher_OS=darwin_amd64 bash |
执行过程会询问密码,需要root权限去管理route.
1 | #... |
第二步
配置 /usr/local/bin/netcatcher_v0.2.0_darwin_amd64/config.json, 添加你需要代理的地址,支持域名,ip,ip,ip+mask。
配置的时候注意interface name, 这个通过 ifconfig
可以查看, 而不是 macos 网络连接里面的名称
1 | { |
1 | # 启动 |
这样就不需要频繁自己修改路由了,vpn挂着,也不影响正常上网。
更新 2023年10月16日 支持windows
- 标题: 配置地址走指定网卡
- 作者: Attson
- 创建于 : 2023-02-19 14:27:11
- 更新于 : 2024-08-14 18:51:33
- 链接: https://attson.github.io/p/network-interface-auto-route.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。