OPNsense配置tun2socks服务(转载)

tun2socks是一个轻量化的代理工具,可以处理来自本设备的任意网络应用的所有网络流量并通过代理转发。支持HTTP/Socks4/Socks5/Shadowsocks等代理协议, 可以作为第三层网关处理来自同一网络中其他设备的所有网络流量。有网友完整总结了在OPNsense上的配置过程,现在全文转载如下:

由于OPNsense上的Squid 包将被降低支持力度,且该方法无法代理 UDP/Quic 流量,故使用一种全新的方法来解决这个问题。

准备可执行文件和配置文件

前往xjasonlyu/tun2socks下载最新的适用于FreeBSD的tun2socks可执行文件,使用winscp等软件,将文件复制到防火墙/usr/local/tun2socks

新建配置文件/usr/local/tun2socks/config.yaml,内容如下:

# debug / info / warning / error / silent
loglevel: info

# URL format: [protocol://]host[:port]
# 这里填写到代理服务器的链接
# 配置透明网关可参考文章:https://rxclc.club/index.php/archives/18/
proxy: socks5://192.168.3.10:7891

# URL format: [driver://]name
# TUN 设备名称,避免使用 tun0
device: tun://proxytun2socks0

# Maximum transmission unit for each packet
mtu: 1500

# Timeout for each UDP session, default value: 60 seconds
udp-timeout: 120s

运行 tun2socks -config config.yaml,测试配置文件是否正确。


新建服务文件

新建/usr/local/etc/rc.d/tun2socks文件,内容如下:

#!/bin/sh

# PROVIDE: tun2socks
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="tun2socks"
rcvar="tun2socks_enable"

load_rc_config $name

: ${tun2socks_enable:=no}
: ${tun2socks_config:="/usr/local/tun2socks/config.yaml"}

pidfile="/var/run/${name}.pid"
command="/usr/local/tun2socks/tun2socks"
command_args="-config ${tun2socks_config} > /dev/null 2>&1 & echo \$! > ${pidfile}"

start_cmd="${name}_start"

tun2socks_start()
{
    if [ ! -f ${tun2socks_config} ]; then
        echo "${tun2socks_config} not found."
        exit 1
    fi
    echo "Starting ${name}."
    /bin/sh -c "${command} ${command_args}"
}

run_rc_command "$1"

赋予运行权限:

 chmod +x /usr/local/etc/rc.d/tun2socks

如果 tun2socks 可执行文件和配置文件放在其他地方,请更改文件内的对应路径。

创建 /etc/rc.conf 并添加以下内容:

tun2socks_enable="YES"

新建 configd 文件

/usr/local/opnsense/service/conf/actions.d/actions_tun2socks.conf文件,内容如下:

[start]
command:/usr/local/etc/rc.d/tun2socks start
parameters:
type:script
message:starting tun2socks

[stop]
command:/usr/local/etc/rc.d/tun2socks stop
parameters:
type:script
message:stopping tun2socks

[restart]
command:/usr/local/etc/rc.d/tun2socks restart
parameters:
type:script
message:restarting tun2socks

[status]
command:/usr/local/etc/rc.d/tun2socks status; exit 0
parameters:
type:script_output
message:request tun2socks status

运行service configd restart ,重启configd服务应用更改。


新建插件

参考: Using plugins

新建/usr/local/etc/inc/plugins.inc.d/tuntosocks.inc 文件 ,内容如下:

<?php
/**
 * register service
 * @return array
 */
function tuntosocks_services()
{
    global $config;

    $services = array();
    $services[] = array(
        'description' => gettext('tun2socks gVisor TCP/IP stack'),
        'configd' => array(
            'restart' => array('tun2socks restart'),
            'start' => array('tun2socks start'),
            'stop' => array('tun2socks stop'),
        ),
        'name' => 'tun-socks',
        'pidfile' => '/var/run/tun2socks.pid'
    );
    return $services;
}

function tuntosocks_syslog()
{
    $logfacilities = array();
    $logfacilities['tun2socks'] = array(
        'facility' => array('tun2socks'),
    );
    return $logfacilities;
}

使用pluginctl -s读取并加载插件。如果输出列表中有出现tun-socks 在Web-GUI的 Services内出现tun-socks服务,点击运行能够成功运行,则说明插件注册成功。


开机启用服务

参考: Bootup / autorun options

创建/usr/local/etc/rc.syshook.d/early/60-tun2socks,注意最好前面的数字不要和文件夹内已有文件重复。填写以下内容:

#!/bin/sh

# Start tun2socks service
/usr/local/etc/rc.d/tun2socks start

赋予文件可执行权限:

 chmod +x /usr/local/etc/rc.syshook.d/early/60-tun2socks

然后重启系统,测试 tun2socks 是否正常启动。


新建端口和配置网关

参考: opnsense使用透明代理并分流

在 Interfaces ‣ Assignments 里,将刚刚创建的 TUN 设备新建为新端口,保存设置。

在 Interfaces ‣ [刚刚添加的网口],进行以下设置,保存应用:

设置
Enable Enable Interface
Description TUN2SOCKS
IPv4 Configuration Type Static IPv4
IPv4 address 10.0.3.1/24

其中 IPv4 地址要和目前所用局域网地址不同。

在 System ‣ Gateways ‣ Single 里,添加网关:

设置
Name TUN2SOCKS_PROXY
Interface TUN2SOCKS
Address Family IPv4
IP address 10.0.3.2
Disable Gateway Monitoring True

保存并应用。


使用别名(Aliases)

别名的配置在 Firewall ‣ Aliases 里,可以通过自定义别名来快速选定一个或多个对象。

本人常用的别名类型为 Host(s)、Port(s)、MAC Address、Network Group。其中 Host(s) 类型用来存储那些不想被代理的网站,Port(s) 类型用来存储想要代理的端口,MAC Address 类型用来存储想要代理的单个设备,Network Group 类型用来存储代理设备集合、非代理目标集合。

下面要使用的别名有:

名称 类型 描述
NoProxyGroup Network group 包括非代理域名、局域网地址
ProxyDevices Network group 包括所有想要代理的设备 MAC 地址
ProxyPort Port(s) 80 端口和 443 端口

也可以上GeoIP规则,但需要注册MaxMind 账号


配置防火墙规则

在 Firewall ‣ Rules ‣ LAN 中添加规则,且该规则在默认的 Default allow LAN to any rule 和 Default allow LAN IPv6 to any rule 之前:

设置
TCP/IP Version IPv4
Protocol TCP/UDP
Source ProxyDevice
Destination / Invert True
Destination NoProxyGroup
Destination port range ProxyPort to ProxyPort
Gateway TUN2SOCKS_PROXY

保存并应用。


原文地址

评论

  1. nicolas
    5 月前
    2023-12-05 19:42:32

    类似的思路,在另一台机器上配置一个透明代理,然后OPN策略路由过去,避免了使用性能弱鸡的tun2socks,配起来还简单

  2. dongdong
    4 月前
    2023-12-16 16:11:58

    有什麼好的工具可以替代squid,主要是給殺毒軟件用的,如果要全局代理過濾廣告,又該如何操作?

    • 鉄血男兒
      博主
      dongdong
      4 月前
      2023-12-17 10:44:01

      squid目前没有更好的替代,haproxy只能实现部分功能。过滤广告可以用DNS黑名单,也可以安装AdGuardHome。

发送评论 编辑评论


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