Hev-Socks5-Tunnel是一种将隧道流量转发到socks代理的工具。与tun2socks 相比,Hev-Socks5-Tunnel提供了更高的传输速度,同时降低了CPU和内存资源的使用,确保了运行的稳定性和可靠性。其主要功能包括重定向TCP连接和支持Fullcone NAT的UDP报文重定向,通常可以用来进行全局流量代理,也可以配合路由表设置,进行一些特定网段的流量代理。Hev-Socks5-Tunnel可以跨平台使用,近期作者更新了对freebsd的支持。应网友的要求,本文介绍在pfSense、OPNsense当中配置Hev-Socks5-Tunnel,实现透明代理的方法。
为了简化安装过程,并实现Web控制,Hev-Socks5-Tunnel的安装采用替换全家桶中的tun2socks方式来完成。必须先安装代理全家桶,再安装Hev-Socks5-Tunnel。
注意:全家桶1.0.1已集成Hev-Socks5-Tunnel,可以直接下载安装使用,无需替换安装。
pfSense
安装HST
请参阅pfSense代理全家桶安装教程完成全家桶安装,然后下载附件pfSense的安装包,解压缩后上传到防火墙root目录,进入安装目录,运行以下命令安装Hev-Socks5-Tunnel:
安装过程如下图所示:
修改配置
转到服务>代理面板>Tun2Socks,根据clash或sin-box代理配置参数,修改tun2socks的默认配置并保存。配置文件包含以下内容:
multi-queue 选项通常用于多队列(Multi-Queue)模式,它的作用是优化数据包的并发处理,以提高网络吞吐量和降低延迟。
- 提高性能:在高负载环境下,启用multi-queue可以让多个CPU核心同时处理流量,从而减少单线程的瓶颈。
- 降低延迟:多个队列可以并行处理不同的连接,提高数据转发的效率。
- 更好的资源利用:适用于多核 CPU服务器,在多线程环境下能更充分利用系统资源。
pipeline选项用于启用或禁用 SOCKS5 数据流的流水线处理(Pipelining),它的作用是减少SOCKS5协议中的握手延迟,提高数据传输效率。
- 减少延迟:启用后,数据可以在握手完成前提前发送,避免传统SOCKS5需要等待握手完成再传输数据的延迟问题。
- 提升吞吐量:适用于高并发SOCKS5代理场景,尤其是流量较大的应用(如视频流、游戏加速等)。
- 降低CPU负载:减少不必要的握手等待,提高数据处理的连续性。
log-level选项用于确定日志记录的层级,包含debug, info, warn or error四级,记录的日志数量依次减少。为了减少日志的数量,建议使用warn或error选项。
添加接口
在Web界面启动tun2socks,并激活tun接口。然后转到接口>分配,添加“tun3000”接口,启用并设置IP和网关。注意分配IP和网关不能与现有任何接口地址冲突,tun接口IP地址和网关可以为同一地址。
添加规则
设置分流规则,让国外IP走tun接口,国内IP走默认网关。转到防火墙>别名管理,网址选项卡,点击右下角添加按钮,添加国内IP段更新网址。
转到防火墙>规则策略,LAN选项卡,修改LAN接口默认规则,国内IP走默认网关,目标选中主机名别名CN_IP,网关为默认网关。
添加另一条国外IP走透明网关的分流规则,源LAN子网,目标any。
网关选tun网关。
设置完成,点击保存。LAN接口规则如下图所示:
开机自启
在Shellcmd插件里,添加一条开机启动命令“service tun2socks start”,Shellcmd类型选“earlyshellcmd”。
检查测试
配置完成以后,重启防火墙,测试是否能正常访问google、youtube等网站,访问ip111.cn,检查分流是否正常。
OPNsense
安装HST
请参阅OPNsense代理全家桶安装教程完成全家桶安装,然后下载附件OPNsense的安装包,解压缩后上传到防火墙root目录,进入安装目录,运行以下命令安装Hev-Socks5-Tunnel:
安装过程如下图所示:
修改配置
转到服务>代理面板>Tun2Socks,根据clash或sin-box配置参数,修改tun2socks的默认配置并保存。
注意:默认虚拟网卡名称“tun_3000”不能修改为tun+数字,必须是“tun_”后跟数字,否则在接口分配处不能识别,这点与pfSense不同。
添加接口
在Web界面启动tun2socks,并激活tun接口。然后转到接口>分配,添加“tun_3000”接口,启用并设置静态IP,注意分配IP不能与现有任何接口地址冲突。选中动态网关选项,Hev-Socks5-Tunnel支持动态网关,会自动生成网关,不需要手动设置。
添加规则
设置分流规则,让国外IP走tun接口,国内IP走默认网关。这里需要用到别名,添加别名有两种方法,一种是使用GeoIP,另一种是使用网址表,两者选一即可。
1、添加GeoIP别名
转到防火墙>别名,GeoIP 设置选项卡,在网址栏粘贴下面的链接地址并应用:
转到防火墙>别名,添加一个中国区GeoIP别名。
添加完成并应用后,如下图所示:
2、添加网址表别名
转到防火墙>别名,添加一个别名,类型选URL Table(IPs),刷新(更新)频率根据需要填写,内容直接粘贴下面的地址,然后保存即可。
别名设置完成以后,转到防火墙>规则策略,LAN选项卡,修改默认接口规则。地址族IPv4,协议any,目标CN_IP,网关指定为默认或运营商出口网关。
添加另一条国外IP走透明网关的分流规则。源LAN子网,目标any,网关选tun网关。
设置完成以后,LAN接口规则如下图所示:
开机自启
无需设置。
检查测试
配置完成以后,重启防火墙,测试是否能正常访问google、youtube等网站,访问 ip111.cn,检查分流是否正常。
其他事项
有网友提出,像clash、sing-box等已内置分流配置的代理工具,是否还需要做中国IP策略路由的问题,经过测试是需要的。如果不做策略路由,很多国外网站会打不开,访问不稳定。
按照您的文章方式把 unbound dns、mosdns、hev-socks5-tunnel和clash都配置好了,但是出现了 lan 网络下的设备无法访问互联网的情况,国内的网站和国外的都无法访问。
防火墙DNS设置
OPNsense导航到服务>Unbound DNS,更改默认监听端口为5355。其他选项保持默认。
clash 配置
clash配置文件的默认DNS必须指向modns,如下面所示:
port: 7890
socks-port: 7891
mode: rule
ipv6: true
allow-lan: true
log-level: error
unified-delay: true
global-client-fingerprint: chrome
external-controller: ‘0.0.0.0:9090’
external-ui: /usr/local/etc/clash/ui
secret: 123456
dns:
enable: true
listen: :53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
127.0.0.1:5335
配置说明
配置文件当中的本地DNS(202.101.202.101)建议改成的所在区域的DNS,这个主要用于解析国内的IP地址,本地的DNS解析速度最快。
策略路由
添加tun接口,并在防火墙上做好策略路由。
问题排查
不能上网,建议先排查DNS问题,再排查防火墙规则问题。
已经设置 Unbound DNS 为5355
mod配置:
MosDNS配置优化版,支持智能Fallback、并行查询、国内外分流。
===================== 使用方法 =====================
1、在运行mosdns之前,先将DNS解析器或Unbound DNS默认监听端口更改为5355;
2、将Clash配置文件默认DNS指向modns,即:127.0.0.1:5335即可。
log:
level: warn # 生产环境建议使用 warn,可调整为 info/debug 进行调试
production: true # 生产模式,减少调试日志
file: “/var/log/mosdns.log” # 指定日志文件路径
plugins:
— 缓存优化 —
type: cache
args:
size: 32768 # 增加缓存大小,提高命中率
lazy_cache_ttl: 86400 # 缓存 TTL 24 小时(适中)
dump_file: “/var/db/mosdns.cache” # 缓存持久化文件
dump_interval: 300 # 5 分钟写入缓存文件,减少数据丢失
— 反向解析 PTR 记录 —
type: reverse_lookup
args:
size: 5000 # 缓存 5000 条 PTR 记录
ttl: 14400 # TTL 4 小时
handle_ptr: true # 启用 PTR 解析
— 远程解析域名列表(境外网站)—
type: domain_set
args:
files:
— 直连解析域名列表(国内网站)—
type: domain_set
args:
files:
— 直连 IP 列表(国内 IP)—
type: ip_set
args:
files:
— 运营商 DNS(本地解析)—
type: forward
args:
upstreams:
addr: “202.96.136.216” # 运营商提供的 DNS 服务器
— 远程 DNS 解析(使用 DoH)—
type: forward
args:
upstreams:
addr: “https://cloudflare-dns.com/dns-query” # Cloudflare DoH
idle_timeout: 3600
addr: “https://dns.google/dns-query” # Google DoH
idle_timeout: 3600
addr: “https://dns.quad9.net/dns-query” # Quad9 DoH
idle_timeout: 3600
addr: “udp://127.0.0.1:5355” # 本地 Unbound 监听的 DNS 服务
idle_timeout: 3600 # 连接空闲超时时间(秒)
— 国内 DNS 解析(使用 DoT)—
type: forward
args:
upstreams:
addr: “tls://223.5.5.5” # 阿里 DoT
idle_timeout: 3600
addr: “tls://119.29.29.29” # 腾讯 DoT
idle_timeout: 3600
— TTL 处理 —
type: sequence
args:
— 国内 DNS 解析流程 —
type: sequence
args:
— 远程 DNS 解析流程 —
type: sequence
args:
exec: $domestic_forward
— 智能 Fallback 机制 —
type: fallback
args:
primary: remote_sequence # 默认使用远程 DNS
secondary: domestic_sequence # 备用国内 DNS
threshold: 300 # 300ms 内超时则切换
always_standby: true # 并行查询,提升速度
— 主要解析流程 —
type: sequence
args:
exec: accept # 命中缓存则直接返回
exec: accept # 反向解析命中则直接返回
exec: goto remote_sequence # 如果域名在远程域名列表中,走远程解析
exec: goto domestic_sequence # 如果域名在直连域名列表中,走国内解析
— 启动 UDP 服务器,监听端口 5335 —
type: udp_server
args:
entry: main_sequence
listen: :5335 # 监听 5335 端口
clash 配置:
port: 7890
socks-port: 7891
allow-lan: true
mode: rule
ipv6: true
log-level: info
unified-delay: true
global-client-fingerprint: chrome
external-controller: ‘0.0.0.0:9090’
external-ui: /usr/local/etc/clash/ui
secret: 123456
dns:
enable: true
listen: :53
ipv6: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
nameserver:
fallback:
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
我这里运行 drill @127.0.0.1 -p 5355 http://www.baidu.com ,返回了下面的内容:
drill @127.0.0.1 -p 5355 http://www.baidu.com
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 45658
;; flags: qr aa rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; http://www.baidu.com. IN A
;; ANSWER SECTION:
http://www.baidu.com. 1 IN A 198.18.0.4
;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:
;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Tue Mar 25 20:37:00 2025
;; MSG SIZE rcvd: 47
1、先放行防火墙LAN规则,只运行clash,在windows客户端输入clash的代理地址,检查是否能正常上外网。
2、如果clash没问题,开启tun2socks,配置好防火墙的tun策略路由,关闭mosdns,使用clash自己的DNS进行分流,测试是否能正常访问外网。
3、前两步没问题,再开启mosdns,将clash的DNS指向mosdns端口,测试解析是否正常。
第一步和第二步运行clash测试,指的是 Unbound DNS 修改回 53 后再进行操作吗?
进电报群,找个人帮你远程一下。