cisco默认split tunnel功能是关闭的,所以开启后默认拦截所有路由且包括本地局域网,导致无法访问路由器管理页面、打印机、部署在本地的其他其他服务等,这就很不方便。

ios端的anyconnect支持connect on demand可以手动把局域网或者特定ip/域名加入白名单,其中在mac端可以下载ipad上的anyconnect同样可以实现对应功能,不要用mac端的cisco(这个也是拦截所有的)。所以一种曲线救国的方式就是在mac平台开启一个本地代理server连接让局域网使用,这个就比较简单了,但是本人现在的主力设备是window,经过探索发现下面的方式。

所需软件

  • WSL
  • 3proxy
  • frp

WSL配置

wsl,并设置为mirror网络模式,这样wsl中可以访问局域网,跳过cisco阻断所有网络,同时也可以实现在wsl中访问局域网设备,比如 安装chrom后,用google-chrome启动浏览器,可以访问本地网络。

WSL中安装3Proxy并开启Socks代理

使用3proxy进行安装, 直接在局域网启动就行,安全性没问题。默认开启1080 sock端口
配置文件在`/etc/3proxy/conf/3proxy.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nscache 65536
nserver 8.8.8.8
nserver 8.8.4.4

config /conf/3proxy.cfg
monitor /conf/3proxy.cfg

log /logs/3proxy-%y%m%d.log D
rotate 60
counter /count/3proxy.3cf


include /conf/counters
include /conf/bandlimiters

auth none
allow *
socks -i127.0.0.1

admin -p8080 -i127.0.0.1

利用FRP将端口穿透至局域网

frp 进行内网穿透,将上述代理端口映射出去。理论上可以映射给一个公网服务器,这样相当于有了随时可以连接的代理服务器,但不建议,因为存在安全隐患。

frps 服务端

在openwrt/istoreos中安装,当前测试的版本是0.65.0

frpc 客户端

在wsl中安装,我用的是GitHub自动安装脚本https://github.com/stilleshan/frpc 然后根据提示信息修改端口

1
2
3
4
5
6
7
8
9
10
11
12
serverAddr = "10.0.0.1"  
serverPort = 7000
auth.method = "token"
auth.token = ""


[[proxies]]
name = "cisco_vpn"
type = "tcp"
localIP = "127.0.0.1"
localPort = 1080
remotePort = 1080

然后sudo systemctl restart frpc重启服务

sudo systemctl status frpc查看运行情况

1
2
3
4
5
6
7
8
9
10
lines 1-16/16 (END)  
● frpc.service - Frp Server Service
Loaded: loaded (/usr/lib/systemd/system/frpc.service; enabled; preset: enabled)
Active: active (running) since Fri 2025-10-24 12:35:14 HKT; 23min ago
Main PID: 193 (frpc)
Tasks: 10 (limit: 18963)
Memory: 22.8M (peak: 36.3M)
CPU: 3.804s
CGroup: /system.slice/frpc.service
└─193 /usr/local/frp/frpc -c /usr/local/frp/frpc.toml

如果有错误,就用journalctl -u frpc.service -b 查看具体信息用gpt去修改对应的语法。

保持WSL持续运行

最后,要保持wsl保持开启状态,不然关掉命令窗口后,代理就没了

  1. WIN+R 运行 shell:startup 打开启动目录
  2. 在此目录中创建文件 wsl-startup.vbs
  3. 在 wsl-startup.vbs 中填充如下内容,Arch需替换为你使用的发行版名称。
1
2
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Arch", 0

这样当你系统启动,登录系统后,Windows会开启 WSL 实例,它会永久等待输入,不会关闭。所以当你下次再使用WSL命令时,就不会遇到需要重新唤醒 WSL 的耗时。

参考知乎文章https://zhuanlan.zhihu.com/p/612755941

wsl -l -v 可以查看wsl运行状态,running就是在运行了

1
2
NAME STATE VERSION  
* Ubuntu Running 2

后续

本文给出了把cisco代理共享给局域网的方法,同时给出在wsl的chrom中访问局域网网页的方法,但windows宿主机仍无法直接访问局域网或者不用代理,之后会分享如何通过端口转发的方式进行访问,且无需切断cisco连接。