OPNsense配置Clash透明代理


Clash一款强大的本地HTTP/HTTPS/SOCKS代理软件,内置DNS服务器,可以最大限度减少DNS污染,支持DoH/DoT上游DNS。可以基于域、GEOIP、IP-CIDR或进程名称规则将数据包路由到不同目的地。代理组允许用户制定灵活的规则,支持自动回退、负载均衡或基于延迟自动选择远程代理节点。近期,有网友开发了在OPNsense上使用的Clash插件,下面介绍安配置方法。

使用的软件版本:OPNsense 23.1.1_2-amd64全中文定制版

一、 添加源

添加Clash安装源,进入shell环境,运行以下命令添加安装源:

fetch -o /usr/local/etc/pkg/repos/mimugmail.conf https://www.routerperformance.net/mimugmail.conf

更新存储库:

pkg update

安装clash本地客户端:

pkg install net/clash

二、 安装Clash UI插件

进入OPNsense的Web界面,转到系统-固件-插件菜单,找到os-clash-maxit插件,点击右侧的安装按钮进行安装(示例已安装完成)。

三、导出clash配置文件

Clash for Windows中导出所使用机场的配置文件,将socks-port: 7891、redir-port: 7892、mixed-port: 7893等删除,保留allow-lan:ture(必要选项),如下图所示:

四、开启Unbound DNS

启用Unbound DNS或Dnsmasq,使用一个即可。

五、 配置Clash

在OPNsense的Web界面,转到服务-Clash-常规,将修改好的配置文件复制到配置选框中,选中启用,然后点击保存。

配置文件保存在/usr/local/etc/clash.conf,可以直接修改。

六、检查Clash服务是否启动

转到仪表大厅,检查Clash服务是否正常启动。

在浏览器输入LAN地址:9090,回车后如果显示以下内容,表示clash服务已正常启动。

{"hello":"clash"}

七、设置系统代理

在客户端系统上,打开代理服务器选项,代理地址输入OPNsense的LAN地址,端口7890。

八、测试代理

检查是否能正常访问google或youtube,浏览ipaddress.my检查地址是否为代理地址。

九、 透明代理设置

客户端透明代理通过设置Web代理来实现。

1、添加内部CA

Https透明代理需要CA,导航到系统> 证书>发行菜单,单击添加一个内部CA,输入各项信息,如下图所示:

2、启用Web代理

转到服务>Web代理>管理,选中启用代理选项。其他选项根据需要设置,尽量使用默认选项。

3、设置父代理

转到服务>Web代理>管理,单击代理常规设置下拉菜单,找到父代理设置,输入Clash代理信息,主机127.0.0.1,端口7890,其他选项留空。

4、设置代理缓存

转到服务>Web代理>管理,单击代理常规设置下拉菜单,找到代理缓存设置,根据需要设置缓存选项。本示例未启缓存。

5、设置正向代理

转到服务>Web代理>管理,单击正向代理下拉菜单,设置正向代理选项,代理接口选LAN,选中启用透明HTTP代理和启用SSL检查,选中仅记录SNI信息,CA选中前面新建的SSL,选中允许接口子网选项,其他选项默认即可。

根据上图中箭头所指位置,添加http和https代理的防火墙规则。添加完成以后如下图所示:

6、检查测试

转到仪表大厅,查看服务选项,检查squid和clash代理服务是否正常启动。客户端取消代理选项,访问google等网站,检查代理是否生效。

至此,Clash的透明代理设置全部完成。

十、使用hysteria节点

如果在远程服务器配置了Hysteria节点,那么可以用Clash Meta来配置hysteria节点。

1、替换Clash内核程序

下载freebsd平台的Clash.Meta内核程序,解压缩后改名为clash,上传到OPNsense的/usr/local/bin/目录,替换原有clash程序,使用chmod +x clash命令赋予该程序执行权限。

2、修改Clash配置文件

下载clash配置模板文件,根据hysteria配置信息,修改节点和代理组信息,端口必须与Web代理-父代理使用的端口一致。

修改完成后,使用基于Meta内核的代理程序进行测试,确保配置文件正确。

3、替换配置

将Clash配置文件的文本内容复制到OPNsense的服务-Clash-常规处的配置文件框中,点击保存,然后点击右上方按钮重启Clash,现在客户端就可以使用远程hysteria节点进行代理访问 了。