opnsense使用透明代理并分流

Started by evalfun, February 20, 2022, 05:00:49 AM

Previous topic - Next topic
思路:使用tun2socks在系统中创建虚拟接口,将进入接口的流量转换成socks5代理流量,并发送至socks5代理服务器,如v2ray或者clash。

下载tun2socks
https://github.com/xjasonlyu/tun2socks/releases
运行
tun2socks -device tun://mytun2socks0 -loglevel info -proxy socks5://127.0.0.1:1081 -stats 0.0.0.0:9000 -udp-timeout 120
注意,tun接口名称尽量随机,不能使用默认的tun0名称,否则不会在web界面中显示。
可以运行在screen里面,防止ssh关闭后进程就结束了。
也可以用clash premium,带tunnel功能。闭源软件看着不爽?其实也有clash premium的开源实现,可以找一个
比如这个https://github.com/wwqgtxx/clashr



配置网络。
在接口-分配中分配新的接口。在接口中给新的接口设置一个你不会用到的ip地址。可以设置为10.44.230.1/30
在系统-网关-单个中添加一个网关。接口选择tun2socks的接口,ip地址为10.44.230.2
如果你的代理服务器支持ipv6,你也可以添加一个私有ipv6地址。


设置国内ip段(可选)
https://docs.opnsense.org/manual/how-tos/maxmind_geo_ip.html


设置策略路由
添加两条规则,第一条规则是不对保留地址重定向,以防内网主机无法访问防火墙上的dns服务器。源选择要科学的内网主机,可以使用组来批量管理主机。目标填私有ip段。
第二条规则是对科学流量进行策略路由。源选择要科学的内网主机,目标为反向选择国内ip地址段,如果要全局代理,目标就是any,网关选择新创建的网关。
对规则排序,最后是像这样的



测试结果
访问国外:

访问国内:



这办法真好,完美的透明代理。
建议使用系统的monit来确保tun2socks和clash的正常运行。

另外,dns的污染如何解决呢?要不来个mosdns

分享一个我自用的mosdns rc脚本,放到/etc/rc.d下面即可。要修改文件路径

#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: mosdns
# REQUIRE: LOGIN FILESYSTEMS
# KEYWORD: shutdown

. /etc/rc.subr

name="mosdns"
desc="mosdns daemon"
rcvar="mosdns_enable"
command="/usr/sbin/daemon"
pidfile="/var/run/${name}.pid"

procname="/usr/local/mosdns-freebsd-amd64/mosdns"
command_args="-f -p ${pidfile} -u root ${procname} -dir2exe -c config.yaml "

load_rc_config $name
run_rc_command "$1"

楼主写的很好 我补充几点
1、如果用clash自己的tun模式,那么记得要回去把配置文件里面的那个name改成 opn识别出来的名称;
2、楼主说的那几个IP。比如你本来网段是192.168.1.1/24,那么可以配192.168.1.2

请各位注意,这种方法有个致命的问题,如果tun2socks不能在网络服务启动之前启动,那么网络服务启动时会找不到这个接口,导致接口重新分配,并且断网
所以没做好开机自启的,使用中千万不要重启



November 25, 2023, 12:28:12 PM #7 Last Edit: November 25, 2023, 01:38:39 PM by Kreee
Quote from: evalfun on September 14, 2022, 05:36:30 AM
请各位注意,这种方法有个致命的问题,如果tun2socks不能在网络服务启动之前启动,那么网络服务启动时会找不到这个接口,导致接口重新分配,并且断网
所以没做好开机自启的,使用中千万不要重启

可以试试这个教程(有参考楼主的部分内容,且有做引用):https://blog.ohmykreee.top/article/setup-tun2socks-in-opnsense/

目前这篇教程有以下几个问题:

  • IPv6 部分还未完善,等我有了 IPv6 环境/有高人帮忙完善再添加
  • rc.d文件部分因为是请教 ChatGPT 写出来的,默认将所有日志输出丢弃,虽然插件文件里有注册日志到 WebGUI,如果有人想尝试可以试试修改那个部分