OPNsense Forum

International Forums => Russian - Русский => Topic started by: hayate on December 11, 2024, 03:21:17 PM

Title: автозапуск сервиса sing-box
Post by: hayate on December 11, 2024, 03:21:17 PM
Коллеги, что-то я совсем потерялся в трех соснах.
Не получается настроить сервис на автозапуск при перезагрузке.
командой /usr/local/bin/sing-box run -c /usr/local/etc/sing-box/config.json все запускается, ну или service sing-box start
А вот при перезапуске не стартует

в /usr/local/etc/rc.d/ лежит скрипт singbox
он запускается на старте /usr/local/etc/rc.syshook.d/start файлом 90-singbox
внутри одной строчкой /usr/local/etc/rc.d/sing-box start
и он даже вроде срабатывает, я вижу в логах
Quote<118>Starting sing-box...
но дальше ничего не происходит
Title: Re: автозапуск сервиса sing-box
Post by: Balya on December 11, 2024, 09:44:19 PM
Попробуйте использовать `rc.syshook.d`: https://docs.opnsense.org/development/backend/autorun.html#syshook
Title: Re: автозапуск сервиса sing-box
Post by: _tribal_ on December 11, 2024, 10:42:10 PM
он вроде та и запускает:
Quoteон запускается на старте /usr/local/etc/rc.syshook.d/start файлом 90-singbox
внутри одной строчкой
Title: Re: автозапуск сервиса sing-box
Post by: hayate on December 12, 2024, 08:43:45 AM
Quote from: Balya on December 11, 2024, 09:44:19 PM
Попробуйте использовать `rc.syshook.d`
Спасибо, но я собственно говоря так и делаю
Title: Re: автозапуск сервиса sing-box
Post by: Balya on December 12, 2024, 02:06:47 PM
Quote from: hayate on December 11, 2024, 03:21:17 PMвнутри одной строчкой

В начале файла должна быть строчка #!/bin/sh
#!/bin/sh
service sing-box start

Файл нужно положить в /usr/local/etc/rc.syshook.d/early/ и обозвать как-нибудь типа 50-sing-box. Цифра в имени файла нужна для указания порядка запуска.
Title: Re: автозапуск сервиса sing-box
Post by: hayate on December 12, 2024, 03:42:49 PM
Quote from: Balya on December 12, 2024, 02:06:47 PM#!/bin/sh
Да это понятно, не стал просто цитировать.
Я в итоге разобрался, правда криво как-то, самому не нравится, но работает.
В syshook запускаю не службу, но напрямую бинарник с нужными параметрами
/usr/local/bin/sing-box run -c /usr/local/etc/sing-box/config.json
Quote from: Balya on December 12, 2024, 02:06:47 PMФайл нужно положить в /usr/local/etc/rc.syshook.d/early/ и обозвать как-нибудь типа 50-sing-box.
А почему в early, а не в start? В доках вроде бы все подобное рекомендуют как-раз в start класть.
Title: Re: автозапуск сервиса sing-box
Post by: _tribal_ on December 12, 2024, 04:59:06 PM
Quote from: Balya on December 12, 2024, 02:06:47 PMФайл нужно положить в /usr/local/etc/rc.syshook.d/early/

эм. Тоже интересно, откуда такая информация.
Title: Re: автозапуск сервиса sing-box
Post by: _tribal_ on December 12, 2024, 05:02:04 PM
Quote from: hayate on December 12, 2024, 03:42:49 PMВ syshook запускаю не службу, но напрямую бинарник с нужными параметрами
странно, я истерию и tun2socks запускаю как службы и нормально стартует
Title: Re: автозапуск сервиса sing-box
Post by: Balya on December 12, 2024, 06:45:24 PM
Quote from: hayate on December 12, 2024, 03:42:49 PMА почему в early, а не в start? В доках вроде бы все подобное рекомендуют как-раз в start класть.

Брал пример из этого мануала: https://blog.ohmykreee.top/article/setup-tun2socks-in-opnsense/
Title: Re: автозапуск сервиса sing-box
Post by: _tribal_ on December 12, 2024, 09:33:45 PM
Ну это я, если память не изменяет, давал ссылку. Я, кстати, пробовал из start оно тоже запускается вполне себе нормально. Если кто найдет описание в чем различие, с удовольствием бы почитал. Подозреваю, что в очередности загрузки дело.. но что из них первое идет start или early вопрос интересный и в доке не описан.

Апд. нашел, наверное все же лучше в Start добавлять пользовательские службы, Early вообще до загрузки всего работает.
Title: Re: автозапуск сервиса sing-box
Post by: hayate on December 13, 2024, 09:34:00 AM
Quote from: Balya on December 12, 2024, 06:45:24 PMБрал пример из этого мануала: https://blog.ohmykreee.top/article/setup-tun2socks-in-opnsense/ (https://blog.ohmykreee.top/article/setup-tun2socks-in-opnsense/)
Да, тоже его видел, но не курил tun2socks пока. Это в планах, когда руки дойдут. Я собственно хочу чтобы все в одной коробке было, потому что сейчас у меня sing-box в openwrt на pi4 крутится. А я хочу в opnsense внутри proxmos. Но времени мало((

Quote from: _tribal_ on December 12, 2024, 05:02:04 PMстранно, я истерию и tun2socks запускаю как службы и нормально стартует
Ну я потом в /var/log/sing-box.log нашел, что он на самом деле запускался. И к нему даже какие-то коннекты успевали от клиентов в сети прийти. Но потом он падал, потому что кто-то его пытался второй раз запустить.

root@OPNsense:~ # cat /var/log/singbox.log
+0300 2024-12-12 16:44:16 INFO outbound/direct[direct]: outbound packet connection to time.apple.com:123
+0300 2024-12-12 16:44:16 INFO ntp: updated time: 2024-12-12 16:44:16 +0300
+0300 2024-12-12 16:44:16 INFO clash-api: restful api listening at [::]:9090
+0300 2024-12-12 16:44:16 INFO inbound/http[http-in]: tcp server started at 10.77.77.1:8081
+0300 2024-12-12 16:44:16 INFO inbound/socks[socks-in]: tcp server started at 10.77.77.1:1080
+0300 2024-12-12 16:44:16 INFO outbound/vless[Amster]: outbound connection to www.gstatic.com:443
+0300 2024-12-12 16:44:16 INFO sing-box started (0.199s)

блаблабла всякие коннекшны
и потом, бац, поехали запускать еще один sing-box

+0300 2024-12-12 16:44:17 INFO clash-api: restful api listening at [::]:9090
FATAL[0001] start service: initialize inbound/http[http-in]: listen tcp 10.77.77.1:8081: bind: address already in use

Я так и не понял почему так. Какие-то взаимосвязи rc.conf и rc.d видимо
Просто командой из rc.syshook.d/start запустилось и ладно, позже разберусь, что там было
Title: Re: автозапуск сервиса sing-box
Post by: tuzzemets on January 23, 2026, 09:22:49 AM
Я на 4pda сделал инструкцию, продублирую сюда:


Всем привет. В общем, долгая дорога по настройке sing-box завершена, если кому интересно напишу список команд и конфиг файл(все заворачиваем в tun, но ru,рф ходят напрямую) пришлю :

Установка Sing-box:
1) pkg install bash
2) cd /tmp
3) fetch https://github.com/Opn...g-box.for.OPNsense.zip
4) unzip sing-box.for.OPNsense.zip
5) chmod +x install.sh
6) bash ./install.sh
7) На этом этапе, должен появитья в opnsense в VPN "Proxy Suite", если нет, то просто перезагрузите страницу".

Настройка конфига sing-box:
1) Можно через веб интерфейс, в VPN > "Proxy Suite" скопировать и вставить мой конфиг (в моём конфиге нужно будет добавить информацию о своём ключе) и нажать на иконку дискеты, тем самым сохранив.
2) Вариант через терминал, просто открываем через редактор (vi,vim,nano) файл config.json по пути /usr/local/etc/sing-box/config.json, ну и удаляем из него все что написал дядюшка Ли и вставляем мой конфиг (в моём конфиге нужно будет добавить информацию о своём ключе) и сохраняем.
3) Перезапускаем сервис командой service sing-box restart
4) Проверям, что в VPN>Proxy Suite нет ошибок (во втором окне будет лог).

 #
Мой конфиг
{
"log": {
"disabled": false,
"level": "info",
"timestamp": true
},

"experimental": {
"clash_api": {
"external_controller": "0.0.0.0:9090",
"external_ui": "/usr/local/etc/sing-box/ui",
"default_mode": "Rule"
},
"cache_file": {
"enabled": true,
"path": "/usr/local/etc/sing-box/cache.db"
}
},

"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "tun_3000",
"mtu": 1450,
"address": ["172.19.0.0/24"],
"auto_route": false,
"strict_route": false,
"endpoint_independent_nat": false,
"stack": "system"
}
],

"outbounds": [
{
"tag": "select",
"type": "selector",
"default": "auto",
"outbounds": ["auto"]
},

{
"tag": "auto",
"type": "urltest",
"outbounds": ["vless-main"],
"url": "https://www.gstatic.com/generate_204",
"interval": "1m",
"tolerance": 50
},

{
"tag": "vless-main",
"type": "vless",
"server": "АДРЕС САЙТА VPS",
"server_port": 443,
"uuid": "ID Пользовательского ключа",
"flow": "xtls-rprx-vision",
"packet_encoding": "xudp",
"tls": {
"enabled": true,
"server_name": "www.google.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "ПУБЛИЧНЫЙ КЛЮЧ",
"short_id": "НУ И SID"
}
}
},

{
"tag": "direct",
"type": "direct"
}
],

"route": {
"rules": [
{
"action": "sniff",
"inbound": "tun-in",
"sniffer": ["http", "tls", "quic"]
},

{
"action": "route",
"rule_set": ["GeoSite-Private"],
"outbound": "direct"
},

{
"action": "route",
"domain_keyword": ["yandex", "yastatic"],
"outbound": "direct"
},

{
"action": "route",
"domain": [
"vk.com",
"habr.com",
"avito.ru",
"4pda.to",
"aliexpress.ru",
"telegram.org",
"t.me",
"ytimg.com",
"cdninstagram.com"
],
"domain_suffix": [
".ru",
".рф",
".xn--p1ai"
],
"ip_cidr": [
"157.240.0.0/16",
"169.45.0.0/16",
"169.57.0.0/16",
"192.168.0.0/16",
"172.16.0.0/16",
"10.0.0.0/8"
],
"outbound": "direct"
},

{
"action": "route",
"process_name": ["transmission", "steam", "codium"],
"outbound": "direct"
},

{
"action": "reject",
"rule_set": ["Category-Ads"]
}
],

"rule_set": [
{
"tag": "Category-Ads",
"type": "remote",
"url": "https://testingcf.jsde...e/category-ads-all.srs",
"format": "binary",
"download_detour": "direct"
},
{
"tag": "GeoSite-Private",
"type": "remote",
"url": "https://testingcf.jsde...eo/geosite/private.srs",
"format": "binary",
"download_detour": "direct"
}
],

"final": "select",
"auto_detect_interface": false
},

"dns": {
"servers": [
{
"tag": "local",
"type": "udp",
"server": "9.9.9.9"
}
],
"final": "local"
}
}




Настройка TUN интерфейса:
1) Переходи Interfaces → Assignments, проверям что интерфейс добавлен, если нет, то добавляем (лучше всего назвать его так же как он и отображается).
2) Добавляем шлюз для TUN, для этого переходим в System>Gateways>Configuration, наживаем на + и добавляем шлюз Name:GW_tun_3000, Interface: tun_3000(ну или как вы назвали), IP Address:172.19.0.1 и ставим галочку напротив Far Gateway.
3) "Оно не обязательно, но мало ли..." Переходим в Interface>tun_3000(ну или как вы назвали), включаем интерфейс ставим галочку напротив Enable Interface в пункте IPv4 Configuration Type выбираем Static IPv4 и в самом низу в IPv4 address вводим 172.19.0.1 маска 24 (по умолчанию стоит 32).
4) Важно предоставить DNS этому интерфейсу, т.к. у меня настроен Unbound DNS, то у меня поумолчанию оно уже настроено.

Настройка Firewall
В общем, тут мы будем настраивать что бы трафик пошёл через итерфейс tun_3000 для определенного VLAN или просто для интерфеса (не знаю как он у вас называется, возможно просто LAN), так что попытайтесь уследить за руками.
1) Переходим в Firewall>NAT>Outbound и там в Mode ввыбираем Hybrid outbound NAT rule generation(automatically generated rules are applied after manual rules) и сохраняем.
2) Далее настроим правило, перейдя в Firewall>Rules выбираем интерфейс, который требуется завернуть в tun_3000, для примера...LAN, добавляем новое правило нажав на "+" и выбираем Action:Pass, Interface:LAN, Protocol:TCP/UDP, Source:LAN net, Gateway:GW_tun_3000 и сохраняем.
3) Нужно поднять данное правило наверх (но ниже разрешающего правила доступа в интернет), сохраняем изменения.
4) Проверяем, что если зайти на 2ip.ru, то ваш ip будет провайдера, а если перейти на 2ip.me то ip будет вашего VPS.