Настройка sing-box (openwrt)

Настройка sing-box (openwrt)

Kiro Maples

Sing-box — это прокси-программа с открытым исходным кодом, предназначенная для обхода интернет-цензуры и обеспечения конфиденциальности пользователей. Для начала работы требуется наличие уже настроенного VPN-сервера (например, WireGuard (wg), VLESS, Shadowsocks (ss) и т. д.). В данной статье мы рассмотрим процесс установки и настройки Sing-box на роутере с OpenWRT.


Установка

Sing-box доступен в репозитории OpenWRT и устанавливается простой командой. Если необходимо, обновите список пакетов перед установкой.

opkg update
opkg install sing-box

После установки необходимо настроить сервис Sing-box, выполнив следующие команды:

uci set sing-box.main.enabled="1"
uci set sing-box.main.user="root"
uci commit sing-box

Примечание: Мы устанавливаем пользователя на root, так как без этого Sing-box не сможет создать туннельный интерфейс (tun).

На этом этапе рекомендуется также отключить автозагрузку Sing-box. В случае возникновения проблем вы сможете просто перезагрузить роутер. После настройки и тестирования автозагрузку можно будет включить обратно:

service sing-box disable


Настройка Sing-box

Основная часть настройки заключается в конфигурировании самого Sing-box. Это осуществляется через JSON-файл /etc/sing-box/config.json. В приведённом ниже примере я настраиваю его для использования протокола VLESS.

{
  "log": {
    "disabled": false,
    "level": "warning"
  },
  "inbounds": [
    {
      "tag": "all-in",
      "type": "tun",
      "domain_strategy": "prefer_ipv4",
      "inet4_address": "172.16.0.1/30",
      "mtu": 9000,
      "stack": "system",
      "auto_route": true,
      "strict_route": false,
      "sniff": true,
      "sniff_override_destination": true
    }
  ],
  "outbounds": [
    {
      "tag": "proxy-out",
      "type": "vless",
      "server": "**********",
      "server_port": 443,
      "uuid": "**********",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "insecure": false,
        "server_name": "*********",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality": {
          "enabled": true,
          "public_key": "**********",
          "short_id": "*********"
        }
      }
    },
    {
      "tag": "direct-out",
      "type": "direct"
    },
    {
      "tag": "block-out",
      "type": "block"
    },
    {
      "tag": "dns-out",
      "type": "dns"
    }
  ],
  "route": {
    "auto_detect_interface": true,
    "final": "direct-out",
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns-out"
      },
      {
        "protocol": "bittorrent",
        "outbound": "direct-out"
      },
      {
        "ip_is_private": true,
        "outbound": "direct-out"
      },
      {
        "rule_set": "geosite-category-ads-all",
        "outbound": "block-out"
      },
      {
        "domain_suffix": [
          ".com",
          ".net",
          ".org",
          ".ai"
        ],
        "outbound": "proxy-out"
      },
      {
        "domain": [
          "4pda.to"
        ],
        "outbound": "proxy-out"
      },
      {
        "rule_set": [
          "antizapret",
          "geosite-facebook",
          "geosite-github",
          "geosite-google",
          "geosite-microsoft"
        ],
        "outbound": "proxy-out"
      }
    ],
    "rule_set": [
      {
        "tag": "antizapret",
        "type": "remote",
        "format": "binary",
        "url": "https://github.com/savely-krasovsky/antizapret-sing-box/releases/latest/download/antizapret.srs",
        "download_detour": "proxy-out"
      },
      {
        "tag": "geosite-google",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.github.com/SagerNet/sing-geosite/rule-set/geosite-google.srs",
        "download_detour": "proxy-out"
      },
      {
        "tag": "geosite-microsoft",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.github.com/SagerNet/sing-geosite/rule-set/geosite-microsoft.srs",
        "download_detour": "proxy-out"
      },
      {
        "tag": "geosite-github",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.github.com/SagerNet/sing-geosite/rule-set/geosite-github.srs",
        "download_detour": "proxy-out"
      },
      {
        "tag": "geosite-facebook",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.github.com/SagerNet/sing-geosite/rule-set/geosite-facebook.srs",
        "download_detour": "proxy-out"
      },
      {
        "tag": "geosite-category-ads-all",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.github.com/SagerNet/sing-geosite/rule-set/geosite-category-ads-all.srs",
        "download_detour": "proxy-out"
      }
    ]
  },
  "dns": {
    "servers": [
      {
        "tag": "cf-dns",
        "address": "tls://one.one.one.one",
        "address_resolver": "local-dns",
        "detour": "proxy-out"
      },
      {
        "tag": "local-dns",
        "address": "local",
        "detour": "direct-out"
      }
    ]
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}

В пройстейшем случае вам нужно только отредактировать секцию "outbounds" и настроить в ней ваш VPN.


Редактирование config.json

Я создаю/редактирую файл sing-box.json у себя на компьютере и переношу его на сервер через ssh с помощью команды:

ssh root@192.168.0.1 "cat > /etc/sing-box/config.json && service sing-box restart" < sing-box.json

здесь 192.168.0.1 IP-адрес вашего сервера


Теперь подробно разберём этот файл по частям, чтобы было понятно, что происходит и как настраивать его под ваши нужды.

1. log – настройка логирования


  "log": {
    "disabled": false,
    "level": "warning"
  }

В этой секции мы включаем логирование и устанавливаем уровень логов на "warning". Логи будут доступны по команде: logread -e sing-box.

2. inbounds – настройка входящего трафика


  "inbounds": [
    {
      "tag": "all-in",
      "type": "tun",
      "domain_strategy": "prefer_ipv4",
      "inet4_address": "172.16.0.1/30",
      "mtu": 9000,
      "stack": "system",
      "auto_route": true,
      "strict_route": false,
      "sniff": true,
      "sniff_override_destination": true
    }
  ]

Здесь мы создаём виртуальное устройство типа "tun" (по умолчанию tun0), через которое сетевой трафик будет проходить в Sing-box. Параметр "inet4_address": "172.16.0.1/30" назначает IP-адресацию для этого интерфейса.

  • "auto_route": true — указывает, что маршрут будет использоваться по умолчанию, то есть все пакеты без дополнительных настроек будут направляться через этот интерфейс.
  • Остальные параметры ("mtu""stack""sniff", и т.д.) обеспечивают оптимальную работу туннельного интерфейса и анализ трафика.

3. outbounds – настройка исходящего трафика


  "outbounds": [
    {
      "tag": "proxy-out",
      "type": "vless",
      "server": "**********",
      "server_port": 443,
      "uuid": "**********",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "insecure": false,
        "server_name": "*********",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality": {
          "enabled": true,
          "public_key": "**********",
          "short_id": "*********"
        }
      }
    },
    {
      "tag": "direct-out",
      "type": "direct"
    },
    {
      "tag": "block-out",
      "type": "block"
    },
    {
      "tag": "dns-out",
      "type": "dns"
    }
  ]

В этой секции настраиваются пути для исходящего трафика с присвоением им тегов для последующей маршрутизации.

  • "tag": "proxy-out" — подключение к вашему VPN-серверу. В данном примере используется протокол VLESS. Необходимо заменить параметры (serveruuid, и т.д.) на свои данные. Для настройки других типов VPN можно обратиться к официальной документации Sing-box.
  • "tag": "direct-out" — канал для передачи трафика напрямую через интернет-провайдера без туннелирования.
  • "tag": "block-out" — используется для блокирования определённого трафика.
  • "tag": "dns-out" — предназначен для обработки DNS-запросов.

4. route - правила маршрутизации трафика


  "route": {
    "auto_detect_interface": true,
    "final": "direct-out",
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns-out"
      },
      {
        "protocol": "bittorrent",
        "outbound": "direct-out"
      },
      {
        "ip_is_private": true,
        "outbound": "direct-out"
      },
      {
        "rule_set": "geosite-category-ads-all",
        "outbound": "block-out"
      },
      {
        "domain_suffix": [
          ".com",
          ".net",
          ".org",
          ".ai"
        ],
        "outbound": "proxy-out"
      },
      {
        "domain": [
          "4pda.to"
        ],
        "outbound": "proxy-out"
      },
      {
        "rule_set": [
          "antizapret",
          "geosite-facebook",
          "geosite-github",
          "geosite-google",
          "geosite-microsoft"
        ],
        "outbound": "proxy-out"
      }
    ],

Параметры маршрутизации:

  • "auto_detect_interface": true — позволяет автоматически обнаруживать сетевые интерфейсы.
  • "final": "direct-out" — определяет поведение по умолчанию. Если ни одно из правил не сработало, трафик направляется через "direct-out" (то есть без проксирования). Если вы хотите по умолчанию отправлять весь трафик через VPN, измените значение на "proxy-out". В этом случае потребуется пересмотреть и скорректировать правила маршрутизации.

"rules" - здесь находятся правила маршрутизации, каждое правило состоит из условия и тега куда нужно направить трафик.


      {
        "protocol": "dns",
        "outbound": "dns-out"
      },
      {
        "protocol": "bittorrent",
        "outbound": "direct-out"
      }

Эти 2 правила используют условие по типа протокола (dns, bittorrent) и отправляют весь соответствующий трафик напрямую без проксирования.


      {
        "rule_set": "geosite-category-ads-all",
        "outbound": "block-out"
      }

Блокирует весь трафик, соответствующий набору правил geosite-category-ads-all, который содержит категории рекламы и нежелательного контента.


      {
        "domain_suffix": [
          ".com",
          ".net",
          ".org",
          ".ai"
        ],
        "outbound": "proxy-out"
      }

Направляет весь трафик с указанными доменными зонами через VPN (proxy-out).


      {
        "domain": [
          "4pda.to"
        ],
        "outbound": "proxy-out"
      }

Трафик к указанным доменам (например, 4pda.to) направляется через VPN.


      {
        "rule_set": [
          "antizapret",
          "geosite-facebook",
          "geosite-github",
          "geosite-google",
          "geosite-microsoft"
        ],
        "outbound": "proxy-out"
      }

Проксирует весь трафик, соответствующий перечисленным наборам правил, например, доступ к Facebook, GitHub, Google, Microsoft и обход антизапрета.

5. rule_set - настройка наборов правил

Каждый набор правил определяется с помощью удалённых файлов, которые загружаются из указанных URL-адресов. Это позволяет автоматически обновлять правила по мере их изменения.

Пример одного набора правил:


      {
        "tag": "antizapret",
        "type": "remote",
        "format": "binary",
        "url": "https://github.com/savely-krasovsky/antizapret-sing-box/releases/latest/download/antizapret.srs",
        "download_detour": "proxy-out"
      }
  • "tag" — идентификатор набора правил.
  • "type": "remote" — указывает, что набор правил загружается удалённо.
  • "format": "binary" — формат файла правил.
  • "url" — ссылка на файл набора правил.
  • "download_detour": "proxy-out" — определяет, через какой исходящий канал будет происходить загрузка файла (в данном случае через VPN).


5. dns – настройка DNS-сервера


"dns": {
  "servers": [
    {
      "tag": "cf-dns",
      "address": "tls://one.one.one.one",
      "address_resolver": "local-dns",
      "detour": "proxy-out"
    },
    {
      "tag": "local-dns",
      "address": "local",
      "detour": "direct-out"
    }
  ]
}

В данном случае настроены 2 сервера:

  1. Защищённый DNS-сервер Cloudflare (one.one.one.one) через TLS. Запросы к нему направляются через VPN (proxy-out).
  2. Локальный DNS-сервер, запросы направляются напрямую

6. experimental – экспериментальные настройки


"experimental": {
  "cache_file": {
    "enabled": true
  }
}

Включает кэширование файлов для повышения производительности.


После завершения всех настроек необходимо перезагрузить Sing-box и убедиться в корректной работе:

service sing-box restart

Проверка статуса сервиса:

service sing-box status

Проверка логов

logread -e sing-box


Настройка OpenWRT

После настройки Sing-box необходимо создать новый сетевой интерфейс и настроить правила файрвола.

Создание нового интерфейса "proxy"

Выполните следующие команды для создания и настройки интерфейса:

uci set network.proxy=interface
uci set network.proxy.proto="none"
uci set network.proxy.device="tun0"
uci set network.proxy.defaultroute="0"
uci set network.proxy.delegate="0"
uci set network.proxy.peerdns="0"
uci set network.proxy.auto="1"
uci commit network
service network restart

Описание параметров:

  • proto="none": Интерфейс без протокола.
  • device="tun0": Указывает на использование туннельного интерфейса tun0.
  • defaultroute="0"delegate="0"peerdns="0": Отключают автоматическую настройку маршрутов и DNS.
  • auto="1": Включает автоматическое подключение интерфейса.

Настройка правил файрвола

Выполните следующие команды для добавления зоны файрвола и настройки перенаправлений:

uci add firewall zone
uci set firewall.@zone[-1].name="proxy"
uci set firewall.@zone[-1].forward="REJECT"
uci set firewall.@zone[-1].output="ACCEPT"
uci set firewall.@zone[-1].input="ACCEPT"
uci set firewall.@zone[-1].masq="1"
uci set firewall.@zone[-1].mtu_fix="1"
uci set firewall.@zone[-1].device="tun0"
uci set firewall.@zone[-1].family="ipv4"
uci add_list firewall.@zone[-1].network="tun0"
uci add firewall forwarding
uci set firewall.@forwarding[-1].dest="proxy"
uci set firewall.@forwarding[-1].src="lan"
uci set firewall.@forwarding[-1].family="ipv4"
uci commit firewall
service firewall reload 


Запуск сервиса

Всё должно корректно работать. В случае каких то проблем просто перезагрузите роутер.

Если после тестирования всё хорошо, можно включить автозагрузку Sing-box:

service sing-box enable 


Наслаждаемся!


Report Page