pfSense、OPNsense配置Hev-Socks5-Tunnel(透明代理)教程

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:

sh install.sh

安装过程如下图所示:

修改配置

转到服务>代理面板>Tun2Socks,根据clash或sin-box代理配置参数,修改tun2socks的默认配置并保存。配置文件包含以下内容:

tunnel:
name: tun3000
mtu: 9000
multi-queue: true
ipv4: 198.18.0.1
socks5:
port: 7891
address: 127.0.0.1
udp: 'udp'
pipeline: true
misc:
log-level: error

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:

sh install.sh

安装过程如下图所示:

修改配置

转到服务>代理面板>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 设置选项卡,在网址栏粘贴下面的链接地址并应用:

https://download.maxmind.com/app/geoip_download_by_token?date=20250404&edition_id=GeoLite2-Country&suffix=tar.gz&token=v2.local.RrUc_6FfXUs9hGaApNBovMPFz8RJrZpB7y75Tinz9uf06OA4786H1sFvHCrE1OR93VkG9FoGfKQSi6gu0hs0d13SsjRZYhgO8jdZ-U_h9O81VHd_uQtnZeLQZG_FEsVsyaFoDCmc25aPqNz_7mlDgAjiAu2SCwYv6LHcir3J320y0As1m6AWH-HqdwCyMYU7s02ulQ

转到防火墙>别名,添加一个中国区GeoIP别名。

添加完成并应用后,如下图所示:

2、添加网址表别名

转到防火墙>别名,添加一个别名,类型选URL Table(IPs),刷新(更新)频率根据需要填写,内容直接粘贴下面的地址,然后保存即可。

https://ispip.clang.cn/all_cn.txt

别名设置完成以后,转到防火墙>规则策略,LAN选项卡,修改默认接口规则。地址族IPv4,协议any,目标CN_IP,网关指定为默认或运营商出口网关。

添加另一条国外IP走透明网关的分流规则。源LAN子网,目标any,网关选tun网关。

设置完成以后,LAN接口规则如下图所示:

注意:两条规则的顺序不能弄错。为了能正常ssh防火墙,还需要添加一条允许访问防火墙自身的规则(上图的第一条规则)。

开机自启

无需设置。

检查测试

配置完成以后,重启防火墙,测试是否能正常访问google、youtube等网站,访问 ip111.cn,检查分流是否正常。

其他事项

有网友提出,像clash、sing-box等已内置分流配置的代理工具,是否还需要做中国IP策略路由的问题,经过测试是需要的。如果不做策略路由,很多国外网站会打不开,访问不稳定。

附件下载

相关文章

评论

  1. Bw8gygcjrbi7
    13 天前
    2025-3-25 11:18:09

    按照您的文章方式把 unbound dns、mosdns、hev-socks5-tunnel和clash都配置好了,但是出现了 lan 网络下的设备无法访问互联网的情况,国内的网站和国外的都无法访问。

    • Avatar photo
      博主
      Bw8gygcjrbi7
      已编辑
      13 天前
      2025-3-25 16:33:19

      防火墙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问题,再排查防火墙规则问题。

      • Bw8gygcjrbi7
        鉄血男兒
        已编辑
        13 天前
        2025-3-25 19:49:51

        已经设置 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:

        — 缓存优化 —

        • tag: “cache”
          type: cache
          args:
          size: 32768 # 增加缓存大小,提高命中率
          lazy_cache_ttl: 86400 # 缓存 TTL 24 小时(适中)
          dump_file: “/var/db/mosdns.cache” # 缓存持久化文件
          dump_interval: 300 # 5 分钟写入缓存文件,减少数据丢失

        — 反向解析 PTR 记录 —

        • tag: “reverse_lookup”
          type: reverse_lookup
          args:
          size: 5000 # 缓存 5000 条 PTR 记录
          ttl: 14400 # TTL 4 小时
          handle_ptr: true # 启用 PTR 解析

        — 远程解析域名列表(境外网站)—

        • tag: “remote_domain_set”
          type: domain_set
          args:
          files:

          • “./domains/gfw.txt”
          • “./domains/proxy-list.txt”
          • “./domains/geosite_geolocation-!cn.txt”

        — 直连解析域名列表(国内网站)—

        • tag: “direct_domain_set”
          type: domain_set
          args:
          files:

          • “./domains/direct.txt”
          • “./domains/china-list.txt”

        — 直连 IP 列表(国内 IP)—

        • tag: “direct_ip”
          type: ip_set
          args:
          files:

          • “./ips/cn.txt”

        — 运营商 DNS(本地解析)—

        • tag: “local_forward”
          type: forward
          args:
          upstreams:

          • tag: local_dns
            addr: “202.96.136.216” # 运营商提供的 DNS 服务器

        — 远程 DNS 解析(使用 DoH)—

        • tag: “remote_forward”
          type: forward
          args:
          upstreams:

        — 国内 DNS 解析(使用 DoT)—

        • tag: “domestic_forward”
          type: forward
          args:
          upstreams:

          • tag: ali_dot
            addr: “tls://223.5.5.5” # 阿里 DoT
            idle_timeout: 3600
          • tag: tencent_dot
            addr: “tls://119.29.29.29” # 腾讯 DoT
            idle_timeout: 3600

        — TTL 处理 —

        • tag: “ttl_sequence”
          type: sequence
          args:

          • exec: ttl 600-86400 # 最小 TTL 600 秒,最大 86400 秒(1 天)
          • exec: accept

        — 国内 DNS 解析流程 —

        • tag: “domestic_sequence”
          type: sequence
          args:

          • exec: $domestic_forward
          • exec: goto ttl_sequence # 应用 TTL 规则

        — 远程 DNS 解析流程 —

        • tag: “remote_sequence”
          type: sequence
          args:

          • exec: $remote_forward # 使用远程 DNS 解析
          • matches: “resp_ip $direct_ip” # 如果解析结果是国内 IP,改用国内解析
            exec: $domestic_forward
          • exec: goto ttl_sequence # 应用 TTL 规则

        — 智能 Fallback 机制 —

        • tag: “fallback”
          type: fallback
          args:
          primary: remote_sequence # 默认使用远程 DNS
          secondary: domestic_sequence # 备用国内 DNS
          threshold: 300 # 300ms 内超时则切换
          always_standby: true # 并行查询,提升速度

        — 主要解析流程 —

        • tag: “main_sequence”
          type: sequence
          args:

          • exec: prefer_ipv4 # 优先解析 IPv4
          • exec: $cache # 先查询缓存,减少 DNS 查询次数
          • matches: has_resp
            exec: accept # 命中缓存则直接返回
          • exec: $reverse_lookup # 进行反向解析
          • matches: has_resp
            exec: accept # 反向解析命中则直接返回
          • matches: “qname $remote_domain_set”
            exec: goto remote_sequence # 如果域名在远程域名列表中,走远程解析
          • matches: “qname $direct_domain_set”
            exec: goto domestic_sequence # 如果域名在直连域名列表中,走国内解析
          • exec: $fallback # 其他情况,使用 fallback 机制解析

        — 启动 UDP 服务器,监听端口 5335 —

        • tag: udp_server
          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:

        我这里运行 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

        • Avatar photo
          博主
          Bw8gygcjrbi7
          13 天前
          2025-3-26 8:43:48

          1、先放行防火墙LAN规则,只运行clash,在windows客户端输入clash的代理地址,检查是否能正常上外网。
          2、如果clash没问题,开启tun2socks,配置好防火墙的tun策略路由,关闭mosdns,使用clash自己的DNS进行分流,测试是否能正常访问外网。
          3、前两步没问题,再开启mosdns,将clash的DNS指向mosdns端口,测试解析是否正常。

          • Bw8gygcjrbi7
            鉄血男兒
            12 天前
            2025-3-26 11:57:49

            第一步和第二步运行clash测试,指的是 Unbound DNS 修改回 53 后再进行操作吗?

          • Avatar photo
            博主
            Bw8gygcjrbi7
            12 天前
            2025-3-26 15:23:13

            进电报群,找个人帮你远程一下。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇