Исправил кое какие косячки после обновления на последнюю версию 25.7.1 файл автозапуска перенести из /usr/local/etc/rc.syshook.d/start/91-tun2socks в /usr/local/etc/rc.syshook.d/early/50-tun2socks
Иначе не подхватывает настройки IP из GUI
-------------------------
1. tun2socksmkdir -p /usr/local/tun2socksfetch -q -o /tmp/tun2socks.zip https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-freebsd-amd64.zip
mkdir -p /usr/local/etc/tun2socks/
unzip -p /tmp/tun2socks.zip tun2socks-freebsd-amd64 > /usr/local/etc/tun2socks/tun2socks
chmod +x /usr/local/etc/tun2socks/tun2socksСоздать новый файл конфигурации /usr/local/etc/tun2socks/config.yaml# debug / info / warning / error / silent
loglevel: info
# URL format: [protocol://]host[:port]
proxy: socks5://192.168.1.1:2080
# URL format: [driver://]name
device: tun://tun2socks0
# Maximum transmission unit for each packet
mtu: 1500
# Timeout for each UDP session, default value: 60 seconds
udp-timeout: 120sСоздайте файл /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/etc/tun2socks/config.yaml"}
pidfile="/var/run/${name}.pid"
command="/usr/local/etc/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Добавить в автозагрузку:echo "tun2socks_enable="YES"" > /etc/rc.conf.d/tun2socksНовый файл для добавление в GIU System: Diagnostics: Services
/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Новый плагинИспользование плагинов. Документация OPNsense (https://docs.opnsense.org/development/backend/legacy.html)
файл /usr/local/etc/inc/plugins.inc.d/tuntosocks.inc
Тут отображается криво. Прикрепил файл
В начале файла первой стройкой добавить "<?php"
/*
* Copyright (C) 2017 EURO-LOG AG
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* 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
Служба появится в списке вывода и отобразится в Web GIU System: Diagnostics: Services
Запуск службы при загрузкеФайл /usr/local/etc/rc.syshook.d/early/50-tun2socks
#!/bin/sh
# Start tun2socks service
/usr/local/etc/rc.d/tun2socks restartПереходим в GUIНастройка интерфейсаДобавить новый интерфейс в Interfaces: Assignments
| Enable | Включить |
| Description | tun2socks |
| IPv4 Configuration Type | Static IPv4 |
| IPv4 address | 10.0.0.1/24 |
Применить.
Добавить шлюз в System: Gateways: Configuration
| Disabled | no |
| Name | GW-tun2socks |
| Interface | tun2socks |
| Address Family | IPv4 |
| IP Address | 10.0.0.2 |
| Far Gateway | yes |
| Disable Gateway Monitoring | yes |
| Priority | 250 |
Применить.
2. Настройка x2rayУстановить x2ray-core
pkg install xray-coreСоздайте файл /usr/local/etc/rc.d/xray#!/bin/sh
# PROVIDE: xray-core
# REQUIRE: LOGIN
# KEYWORD: shutdown
# Add these lines to /etc/rc.conf.local or /etc/rc.conf to enable `xray':
#
# xray_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable xray
# xray_config (path): Set to "/usr/local/etc/xray-core" by default
# Set it to the xray server config
# xray_logdir (path): Set to "/var/log/xray-core" by default.
# Set it to the directory of xray log files
# xray_env (str): Set to "" by default.
# Set it to the desired environment variables
. /etc/rc.subr
name="xray"
rcvar="xray_enable"
: ${xray_enable="NO"}
: ${xray_config="/usr/local/etc/${name}-core"}
: ${xray_logdir="/var/log/${name}-core"}
: ${xray_env=""}
: ${xray_user="v2ray"}
: ${xray_group="v2ray"}
asset_env="XRAY_LOCATION_ASSET=/usr/local/share/${name}-core"
pidfile="/var/run/$name.pid"
procname="/usr/local/bin/xray"
command="/usr/sbin/daemon"
command_args="-c -p ${pidfile} /usr/bin/env ${asset_env} ${xray_env} ${procname} -confdir ${xray_config}"
required_files="${xray_config}"
start_precmd="xray_startprecmd"
xray_startprecmd() {
touch "${pidfile}"
chown ${xray_user}:${xray_group} "${pidfile}"
mkdir -p "${xray_logdir}"
chown -R ${xray_user}:${xray_group} "${xray_logdir}"
}
load_rc_config "$name"
run_rc_command "$1"chmod +x /usr/local/etc/rc.d/xrayДобавить в автозагрузку:echo "xray_enable="YES"" > /etc/rc.conf.d/xrayФайл /usr/local/etc/rc.syshook.d/start/91-xray
]
#!/bin/sh
# Start xray service
/usr/local/etc/rc.d/xray restart
Новый файл для добавление в GIU System: Diagnostics: Services и обновление по cron'у
/usr/local/opnsense/service/conf/actions.d/actions_xray.conf
[start]
command:/usr/local/etc/rc.d/xray start
parameters:
type:script
message:starting xray
[stop]
command:/usr/local/etc/rc.d/xray stop
parameters:
type:script
message:stopping xray
[restart]
command:/usr/local/etc/rc.d/xray restart
parameters:
type:script
message:restarting xray
[update]
command:/usr/local/etc/xray-core/update-xray.sh; exit 0
parameters:
type:script
description: Update xray GeoIP and GeoSite
message:request xray update databaseСоздать файл /usr/local/etc/xray-core/update-xray.sh для обновление GeoIP и GeoSite
#!/bin/sh
wget https://raw.githubusercontent.com/runetfreedom/russia-v2ray-rules-dat/release/geoip.dat -O /usr/local/share/xray-core/geoip.dat
wget https://raw.githubusercontent.com/runetfreedom/russia-v2ray-rules-dat/release/geosite.dat -O /usr/local/share/xray-core/geosite.dat
/usr/local/etc/rc.d/xray restartСоздать файл /usr/local/etc/inc/plugins.inc.d/xray.inc
В начале файла первой стройкой добавить "<?php"
/*
* Copyright (C) 2017 EURO-LOG AG
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* register service
* @return array
*/
function xray_services()
{
global $config;
$services = array();
$services[] = array(
'description' => gettext('xray service'),
'configd' => array(
'restart' => array('xray restart'),
'start' => array('xray start'),
'stop' => array('xray stop'),
),
'name' => 'xray',
'pidfile' => '/var/run/xray.pid'
);
return $services;
}
function xray_syslog()
{
$logfacilities = array();
$logfacilities['xray'] = array(
'facility' => array('xray'),
);
return $logfacilities;
}Для перезагрузки плагинов запустить
pluginctl -s
Проверить в списке xray
Перегрузить GUI service configd restart
Настроить /usr/local/etc/xray-core/config.json для xray со своими параметрами.
запустить /usr/local/etc/xray-core/update-xray.sh для обновления баз
Идем в WebGUI
System: Settings: CronДобавляем новое задание по обновлению баз каждые 8 часов:
| Enabled | yes |
| Minutes | 0 |
| Hours | */8 |
| Day of the month | * |
| Months | * |
| Days of the week | * |
| Command | Update GeoIP and GeoSite |
| Parameters | |
| Description | Update GeoIP & GeoSite for xray |
Сохранить - Применить
- Firewall: NAT: Outbound
- Установить Гибридный режим: Hybrid outbound NAT rule generation
Добавить(если нет) новый интерфейс tun2socks
Interface - tun2socks
TCP/IP - Version IPv4
any to any
остальное по умолчанию
Action Pass
Disabled no
Quick yes
Interface LAN
Direction in
TCP/IP Version IPv4
Protocol TCP/UDP
Source/Invert no
Source any
Destination/Invert yes
Destination RFC1918
Description Trafic to xray
Gateway 10.0.0.2(Шлюз tun2socks)
Сохранить-Применить
Спасибо тебе, добрый человек!
Quote from: males on July 14, 2025, 08:20:52 AMФайл /usr/local/etc/rc.syshook.d/start/91-xray
а вот это зачем? Оно и так нормально стартует вроде бы. Тем более, что у вас там не старт сервиса а его перезапуск
Привет. Почему-то при назначении интерфейса нет tun2socks, хотя сервис запускается
Получилось всё настроить, сервисы запускаются. Но почему-то в дашборде tun2socks отмечен красным, и заблокированные сайты не грузятся.
В консоли: root@OPNsense:~ # Xray 25.3.6 (Xray, Penetrates Everything.) Custom (go1.24.5 freebsd/amd64)
A unified platform for anti-censorship.
2025/08/02 20:08:00.393714 Using confdir from arg: /usr/local/etc/xray-core
2025/08/02 20:08:00.393964 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/00_log.json Format:json}
2025/08/02 20:08:00.394152 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/01_api.json Format:json}
2025/08/02 20:08:00.394162 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/02_dns.json Format:json}
2025/08/02 20:08:00.394166 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/03_routing.json Format:json}
2025/08/02 20:08:00.394180 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/04_policy.json Format:json}
2025/08/02 20:08:00.394195 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/05_inbounds.json Format:json}
2025/08/02 20:08:00.394198 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/06_outbounds.json Format:json}
2025/08/02 20:08:00.394208 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/07_transport.json Format:json}
2025/08/02 20:08:00.394223 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/08_stats.json Format:json}
2025/08/02 20:08:00.394226 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/09_reverse.json Format:json}
2025/08/02 20:08:00.394238 [Info] infra/conf/serial: Reading config: &{Name:/usr/local/etc/xray-core/config.json Format:json}
При проверке интерфейса: root@OPNsense:/usr/local/tun2socks # ./tun2socks -config ./config.yaml
{"level":"fatal","ts":1754155319.788566,"caller":"engine/engine.go:45","msg":"[ENGINE] failed to start: create tun: interface proxytun2socks0 already exists","stacktrace":"github.com/xjasonlyu/tun2socks/v2/engine.Start\n\tgithub.com/xjasonlyu/tun2socks/v2/engine/engine.go:45\nmain.main\n\tgithub.com/xjasonlyu/tun2socks/v2/main.go:67\nruntime.main\n\truntime/proc.go:272"}
Quote from: foxyserg on August 02, 2025, 07:25:56 PMПри проверке
версия опнсенсе какая? Если последняя актуальная то замените имя интерфейса на tun_3000
Quote from: males on July 14, 2025, 08:20:52 AMФайл /usr/local/etc/rc.syshook.d/start/91-xray
а вот это зачем? Оно и так нормально стартует вроде бы. Тем более, что у вас там не старт сервиса а его перезапуск
[/quote]
Это перезапуск после загрузки всех сетевых интерфейсов. Иначе x2ray не стартует у меня
Quote from: foxyserg on August 02, 2025, 07:25:56 PMПри проверке интерфейса: root@OPNsense:/usr/local/tun2socks # ./tun2socks -config ./config.yaml
{"level":"fatal","ts":1754155319.788566,"caller":"engine/engine.go:45","msg":"[ENGINE] failed to start: create tun: interface proxytun2socks0 already exists","stacktrace":"github.com/xjasonlyu/tun2socks/v2/engine.Start\n\tgithub.com/xjasonlyu/tun2socks/v2/engine/engine.go:45\nmain.main\n\tgithub.com/xjasonlyu/tun2socks/v2/main.go:67\nruntime.main\n\truntime/proc.go:272"}
Поменяй имя интерфеса с "proxytun2socks0" в любой другой. У тебя ошибка что такой интерфейс уже существует
Добрый день. Можешь скинуть пример/usr/local/etc/xray-core/config.json файла.
Всем доброго дня. Решил перейти с пластикового роутера на железо, выбор пал на OPNsense. До этого на роутере стоял sing-box, которого, как я понял, на OPNsense нет. Вот наткнулся на эту страницу. Правильно я понимаю работу этой связки? То есть, имеется подсеть 192.168.0.0/24 со всяким гаджетами, приборами, компьютерами. Тогда:
LAN->tun2socks->xray-core->WAN->VPS с настроенным vless (заведомо рабочий)
Если я неправильно понимаю эту цепочку - прошу поправить меня. Если правильно - тогда строка из
/usr/local/etc/tun2socks/config.yaml# URL format: [protocol://]host[:port]
proxy: socks5://192.168.1.1:2080указывает на что? Интерфейс LAN OPNsense?
Далее...
После настройки
QuoteДобавить шлюз в System: Gateways: Configuration
Disabled no
Name GW-tun2socks
Interface tun2socks
Address Family IPv4
IP Address 10.0.0.2
Far Gateway yes
Disable Gateway Monitoring yes
Priority 250
в свойствах интерфейса TUN_3000 (я его так назвал следуя рекомендациям выше) в пункте IPv4 gateway rules появляется возможность выбрать GW-tun2socks. Нужно выбирать или оставить Disabled?
В настройке
QuoteFirewall: Rules: LAN
Action Pass
Disabled no
Quick yes
Interface LAN
Direction in
TCP/IP Version IPv4
Protocol TCP/UDP
Source/Invert no
Source any
Destination/Invert yes
Destination RFC1918
Description Trafic to xray
Gateway 10.0.0.2(Шлюз tun2socks)
в пункте Destination отсутствует "RFC1918" Что я сделал не так или можно выбрать что-то другое?
Ну и напоследок, если я правильно понял всю цепочку, хотелось бы увидеть inbounds из config.json от xray-core. Какой адрес:порт там должен быть. По умолчанию вроде бы как локалхост слушается.
Если кто-то откликнется - огромное спасибо за ответы и пояснения!!!
Меня как чайника тоже интересуют вопросы из предыдущего поста.
Как связаны IP адреса:
192.168.1.1 - LAN адрес?
10.0.0.2 - Шлюз. Для того чтобы перенаправить трафик. Понятно.
10.0.0.1 - Только для того что бы интерфейс был (рандомный IP из подсети шлюза и больше ни с чем не связан)?
И не очень понятно каки образом трафик из tun2socks перенаправляется в xray ?
В конфиге tun2socks указывается 192.168.1.1, а на интерфейсе 10.0.0.1. Так должно быть?
Quote from: foxyserg on August 01, 2025, 11:40:39 AMПривет. Почему-то при назначении интерфейса нет tun2socks, хотя сервис запускается
Подскажите пожалуйста, как решили эту проблему, или я что-то пропустил и не понимаю что, или просто чего-то не понимаю.
В interfaces: overview он присутсвует, но помечен как down, и в списке assignments его нет
UPD - так и не понял в чем было дело, на чистой системе установил еще раз - завелось
Теперь имею такой же вопрос по конфигу xray, может кто поделиться примером своим, если удалось завести?
UPD - Завел xray. Настраивал не через config.json, а в конфиг файлах самого xray по вдресу /usr/local/etc/xray-core/
содержание моего 05_inbounds.json :
{
"inbounds": [
{
"listen": "10.13.66.1",
"port": 10808,
"protocol": "socks",
"tag": "socks-in",
"settings": {
"udp": true,
"auth": "noauth"
}
}
]
}файл 03_routing.json
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"inboundTag": [
"socks-in"
],
"outboundTag": "vless-reality"
}
]
}
}
В файле 06_outbonds.json для своего соединения так же указан "tag": "vless-reality"
Я вообще хз правильно ли по тегам так их маршрутить, подсмотрел в других конфигах, я в этом деле не силен, настраиваю ручками первый раз.
Адресом прослушки я указал сам opnsense, по умолчанию стоял локалхост 127.0.0.1, любой другой у меня вываливался в ошибку
Теперь буду пытаться подружить tun2socks с xray-core, если у кого-то есть замечания и дополнения - буду только рад
Знаю только что айпишник и порт в inbounds должен соответствовать тому, что указан в конфиге tun2socks/config.yaml
Проверку, что конфиг xray вообще работает и перенаправляет трафик проводил так - указал этот айпишник и порт, в браузере как прокси, странички забегали, но скорость оставляет желать лучшего, хотя железо на котором стоит opnsense не самое плохое, и явно лучше моего старого кинетика, но там скорость получается почему-то больше через xray, буду наблюдать. Единственное что - я не буду пользоваться списками какими-то, буду делать через свои с помощью правил aliases, так что протестировать пункт геобаз я не смогу.
UPD - вроде завел, осталось разобраться с правилами фаервола. Проверить работоспособность можно так:
для tun2socks:
curl --interface tun_3000 https://www.google.com - если выплюнет стену символов, значит всё ок
для xray можно запросить айпишник с сайта:
сurl https://whatismyip.akamai.com 1 -x socks5://10.13.66.1:10808вместо указанного айпишника подставьте тот который у вас слушает xray. Если вернет айпишник точки выхода xray - значит всё ок.
Делал такую связку.
Не сразу завелось, но заработало благодаря всем тут отписавшимся.
Но в этой связке нужно следить за двумя сервисами(службами).
Проще использовать sing-box. Будет при этом один сервис(служба).
Он может работать как просто прокси, так и сразу создавать интерфейс на который можно настроить переадресацию.
Вот ссыль (https://github.com/opnwall)на гитхаб, где можно взять установщик для OPNSense и pfSense.
Quote from: Serg on December 10, 2025, 07:16:01 AMДелал такую связку.
Не сразу завелось, но заработало благодаря всем тут отписавшимся.
Но в этой связке нужно следить за двумя сервисами(службами).
Проще использовать sing-box. Будет при этом один сервис(служба).
Он может работать как просто прокси, так и сразу создавать интерфейс на который можно настроить переадресацию.
Вот ссыль (https://github.com/opnwall)на гитхаб, где можно взять установщик для OPNSense и pfSense.
А есть какая-то инфа почему там исользуется Unbound? У меня, например, doh через dnscrypt, и как его туда завести не понятно, документации толком никакой нет...
Quote from: Erhesar on December 23, 2025, 02:07:39 PMА есть какая-то инфа почему там исользуется Unbound? У меня, например, doh через dnscrypt, и как его туда завести не понятно, документации толком никакой нет...
Есть сайт (https://sing-box.sagernet.org/configuration/dns/server/https/)с описанием параметров файла конфигурации
Quote from: Serg on December 10, 2025, 07:16:01 AMсразу создавать интерфейс на который можно настроить переадресацию.
точно умеет? интересно, почему тогда на сайте синг-бокс написано, что не умеет создавать tun на freebsd или уже научилось?
Кстати, самое фиговое в том скрипте, что оно напрямую в конфиг опнсенс гвоздями вкорячивает интерфейс новый, что может аукнуться при всяких обновах.
Вот оно:
log "$YELLOW" "添加 tun_3000 接口..."
if grep -q "<if>tun_3000</if>" "$CONFIG_FILE"; then
log "$CYAN" "存在同名接口,忽略"
else
awk '
BEGIN { inserted = 0 }
{
print
if ($0 ~ /<\/lo0>/ && inserted == 0) {
print " <opt10>"
print " <if>tun_3000</if>"
print " <descr>TUN</descr>"
print " <enable>1</enable>"
print " </opt10>"
inserted = 1
}
}
' "$CONFIG_FILE" > "$TMP_FILE" && mv "$TMP_FILE" "$CONFIG_FILE"
echo "接口添加完成"
fi
echo ""тупо вписывается интерфейс в обход стандартных механизмов opnsense.
Quote from: _tribal_ on December 24, 2025, 10:57:59 PMточно умеет? интересно, почему тогда на сайте синг-бокс написано, что не умеет создавать tun на freebsd или уже научилось?
Кстати, самое фиговое в том скрипте, что оно напрямую в конфиг опнсенс гвоздями вкорячивает интерфейс новый, что может аукнуться при всяких обновах.
Умеет уже давно (https://sing-box.sagernet.org/configuration/inbound/tun/)
Я использую sing-box в pfSense. Интерфейс появляется только когда служба/сервис sing-box запущен. В opnSense тоже такое поведение должно быть
Нашёл офлайн генератор конфигов для sing-box и xray (https://forum.artnet.biz/threads/gotovyi-generator-konfigov-sing-box.469/)
Более-менее разобрался в этом чуде китайской инженерной мысли, в целом понял логику работы sing-box.
Форвардинг в unbound нужен только для того чтоб перехватывать dns запросы внутри sing-box. То есть по сути unbound остается только в роли рабочего кэша и разных блокировок-перезаписей. DoH я настроил внутри конфига sing-box. "auto_route": true и "strict_route": true в конфиге позволяют перехватывать весь трафик системы и заворачивать его в тун, то есть правила фаервола на каждый конкретный интерфейс не нужны. Это удобно, но не без минусов. Например если sing-box упадет, трафик пойдет напрямую как раньше уже через не зашифрованный днс, который указан как заглушка для форвардинга. Из личных наблюдейний - MTU 9000 это прям дохрена, выше 1400 я бы не ставил, чтоб пакеты по wifi не фрагментировались, иначе будут большие потери скорости. Ну и стак с system на gvisor я у себя поменял - он работает быстрее как по мне, но местами не очень стабильно, вероятно вернусь к system
UPD: После доп тестов пришел к выводу, что MTU вообще никак не влияет на фрагментацию в этом конфиге. что 1400, что 9000 работают одинаково, пока оставил тестироваться с 9000. А вот stack влияет очень сильно. У меня внешняя ап точка, через system я не закачку по wifi не получаю больше 150 мегабит (по проводу получаю свои 500 по тарифу), однако стоит только сменить stack на gvisor - сразу 500 в обе стороны и по wifi. Не понятно с чем связано.
Quote from: Serg on December 25, 2025, 07:08:25 AMУмеет уже давно (https://sing-box.sagernet.org/configuration/inbound/tun/)
Я использую sing-box в pfSense. Интерфейс появляется только когда служба/сервис sing-box запущен. В opnSense тоже такое поведение должно быть
1. Я так то не про просто наличие tun он там оочень давно, а умение САМОСТОЯТЕЛЬНО создавать его использую СТАНДАРТНЫЕ механизмы ОС freebsd.
2. Если вы его добавляли использую указанный вами скрипт, то интерфейс там вкорячивается тупо в конфиг системы в обход механизмов ОС, это все же слегка другое. И если вы просто установите пакет sing-box без "предварительных ласк" конфига ОС, оно не стартанет, ругаясь на ошибки.
Quote from: Erhesar on December 25, 2025, 10:44:15 AMИз личных наблюдейний - MTU 9000 это прям дохрена, выше 1400 я бы не ставил, чтоб пакеты по wifi не фрагментировались, иначе будут большие потери скорости.
данное число используется на внутреннем интерфейсе программы и не влияет на фрагментацию внешних пакетов за ее пределами.
Quote from: _tribal_ on December 26, 2025, 09:32:10 AM1. Я так то не про просто наличие tun он там оочень давно, а умение САМОСТОЯТЕЛЬНО создавать его использую СТАНДАРТНЫЕ механизмы ОС freebsd.
2. Если вы его добавляли использую указанный вами скрипт, то интерфейс там вкорячивается тупо в конфиг системы в обход механизмов ОС, это все же слегка другое. И если вы просто установите пакет sing-box без "предварительных ласк" конфига ОС, оно не стартанет, ругаясь на ошибки.
Вот бы разработчики opnSense и pfSense создали пакет. Тогда бы интеграция была полная.
Такой вид софта без конфигов и не должен запускаться без предварительной настройки, т.к. часто его ставят в уже настроенную систему. И если б он запускался без предварительной настройки, то мог поломать работу системы.
Еще заметил, что sing-box в режиме auto_route при падении линка на шлюзе и последующем восстановлении не апдейтит состояния, то есть его нужно перезагружать, иначе он будет долбиться в пустоту. Наверное можно придумать какой-то скрипт и механизм отслеживания состояния шлюза чтоб оно запускало перезапуск, но я пока не настолько шарю в этом. Но как по мне в этом решении все же слишком много НО что бы использовать его стабильно. Может у кого-то есть опыт настройки и запуска голого sing-box?
я так понимаю эта солянка собрана вокруг этого пакета Vincent-Loeng (https://github.com/Vincent-Loeng/sing-box)
Quote from: Serg on December 26, 2025, 10:50:20 AMВот бы разработчики opnSense и pfSense создали пакет. Тогда бы интеграция была полная.
не в разработчиках opnsense дело это особенности работы именно freebsd и нежелание разработчиков sing-box это править, а так в портах sing-box есть и доступен для установки, правда в UI его не будет.
Quote from: Erhesar on December 26, 2025, 02:55:42 PMМожет у кого-то есть опыт настройки и запуска голого sing-box?
голый вы не запустите без доп прослойки для создания tun.. как создавать его здесь же и описано в первом сообщении, только вместо xray берете коробку. У меня именно так и работает. Но я auto_rote не использую.
Апд. Хотя я неуверен, что именно вот тот модифицированный используется из вашей ссылки, подозреваю, что китайцы нашли способ обойти создание tun пакетом, и пихают его непосредственно в систему в ручную, я смотрю что на гите везде убрали использование дополнительного софта для работы с tun.
Hello. Does this guide work on OPNsense version 25.7.10? My TUN device appears in the device overview, but it absolutely won't show up in Interfaces: Assignments. The same applies to the gateway.
Всех с Рождеством!
Если кто живой есть после праздников, подскажите как победить Tun2socks, по четырем инструкциям пробовал настраивать:
этой соответственно и
https://github.com/alardus/opnsense_shadowsocks
https://blog.kre3.net/en/article/setup-tun2socks-in-opnsense/
https://telegra.ph/Obhod-blokirovok-na-OPNsense-cherez-Xray-po-domenam-cherez-dnsmasq-rezolver-09-30
И автоматическим скриптом пробовал fetch -o - https://github.com/user-attachments/files/23259388/install.sh | sh.
Никак не добьюсь чтоб интерфейс tun0 в Interfaces: Assignments появился(один раз сделал, но это вручную правил config.xml и он всегда "missing" висел.
Максимум что получилось, после перезагрузки OPNsense во вкладке Обзор Интерфейсы tun0 показывал зеленый статус с прописанными IP и шлюзом, но в Assignments так и отсутствует.
Это последняя версия OPN не даёт корректно настроить или руки всё же кривые?
Quote from: storm-f on January 05, 2026, 10:09:47 AMHello. Does this guide work on OPNsense version 25.7.10? My TUN device appears in the device overview, but it absolutely won't show up in Interfaces: Assignments. The same applies to the gateway.
Try to change "device: tun://tun2socks0" in /usr/local/etc/tun2socks/config.yaml for something else, like "device: tun://t2s0" or "device: tun://tun_3000"
Quote from: storm-f on January 07, 2026, 08:00:49 PMВсех с Рождеством!
Если кто живой есть после праздников, подскажите как победить Tun2socks, по четырем инструкциям пробовал настраивать:
этой соответственно и
https://github.com/alardus/opnsense_shadowsocks
https://blog.kre3.net/en/article/setup-tun2socks-in-opnsense/
https://telegra.ph/Obhod-blokirovok-na-OPNsense-cherez-Xray-po-domenam-cherez-dnsmasq-rezolver-09-30
И автоматическим скриптом пробовал fetch -o - https://github.com/user-attachments/files/23259388/install.sh | sh.
Никак не добьюсь чтоб интерфейс tun0 в Interfaces: Assignments появился(один раз сделал, но это вручную правил config.xml и он всегда "missing" висел.
Максимум что получилось, после перезагрузки OPNsense во вкладке Обзор Интерфейсы tun0 показывал зеленый статус с прописанными IP и шлюзом, но в Assignments так и отсутствует.
Это последняя версия OPN не даёт корректно настроить или руки всё же кривые?
возможно то же решение
Кстати, если кто интересуется возможностью управлять тем, какие домены заворачивать через dnsmasq, я столкнулся с проблемой которую пока не смог решить. Dnsmasq резолвит всегда в режиме wildcard, то есть если будет указан example.com, то завернется и e1.example.com, что в некоторых случаях будет вредно. Например, если взять epicgames.com - завернутся все поддомены, которые отвечают за оплату (это нам нужно что бы обойти "ой в вашем регионе не доступно", и поддомены которые отвечают за загрузку контента, что вообще ни разу не нужно. Имейте в виду.