Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Здравствуйте!

Прошу подсказать с реализацией выборочной маршрутизации адресов из заданного ipset через sing-box, работающий в режиме "transparent proxy". Когда-то делал аналогичную вещь для TOR, все отлично работало - dnsmasq заполняет ipset, и далее скрипт в netfilter.d отправляет все в тор по при появлении адреса в ipset:

#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
if [ -z "$(iptables-save 2>/dev/null | grep torbypass)" ]; then
    ipset create torbypass hash:net -exist
    iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set torbypass dst -j REDIRECT --to-port 9040
    iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set torbypass dst -j REDIRECT --to-port 9040
fi


exit 0

Теперь решил сделать аналогичный конфиг для sing-box. Сам sing-box работает, проверял настроив inbound соединение в режиме socks5 - браузер подключается и показывает правильный IP при проверке.

Проблема возникает при переводе sing-box в режим transparent proxy. В логах видно, что при обращении к адресу из ipset  sing-box пакет попадает в inbound - порт sing-box, а вот дальше вместо того, чтобы отправить пакет через outbound соединение, sing-box пытается его снова отправить в порт transparent proxy, то есть получается петля маршрутизации. Подозреваю, что это возникает потому, что адрес остается в ipset и правило iptables снова срабатывает.

Подскажите пожалуйста, как можно исправить скрипт в netfilter.d, чтобы соединения из sing-box шли сразу во внешний интерфейс, не создавая петли.

Опубликовано

У вас в правилах указано -i br0, значит это применяется только для пакетов пришедших на этот мост, не должно быть петли.
Проверьте конфиг sing-box, что у вас там в маршрутах

Опубликовано
13 часов назад, wolowizard сказал:

Здравствуйте!

Прошу подсказать с реализацией выборочной маршрутизации адресов из заданного ipset через sing-box, работающий в режиме "transparent proxy". Когда-то делал аналогичную вещь для TOR, все отлично работало - dnsmasq заполняет ipset, и далее скрипт в netfilter.d отправляет все в тор по при появлении адреса в ipset:

#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
if [ -z "$(iptables-save 2>/dev/null | grep torbypass)" ]; then
    ipset create torbypass hash:net -exist
    iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set torbypass dst -j REDIRECT --to-port 9040
    iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set torbypass dst -j REDIRECT --to-port 9040
fi


exit 0

Теперь решил сделать аналогичный конфиг для sing-box. Сам sing-box работает, проверял настроив inbound соединение в режиме socks5 - браузер подключается и показывает правильный IP при проверке.

Проблема возникает при переводе sing-box в режим transparent proxy. В логах видно, что при обращении к адресу из ipset  sing-box пакет попадает в inbound - порт sing-box, а вот дальше вместо того, чтобы отправить пакет через outbound соединение, sing-box пытается его снова отправить в порт transparent proxy, то есть получается петля маршрутизации. Подозреваю, что это возникает потому, что адрес остается в ipset и правило iptables снова срабатывает.

Подскажите пожалуйста, как можно исправить скрипт в netfilter.d, чтобы соединения из sing-box шли сразу во внешний интерфейс, не создавая петли.

redirect это не tproxy.

Опубликовано (изменено)

tproxy и ipset  это разные вещи 
для tproxy у тебя  что-то похожее должно быть

iptables -t mangle -A "${TEST_CHAIN}" -p tcp -m socket -j TPROXY --on-port 12345 --tproxy-mark 0x1/0x1 2>/dev/null;

 

Изменено пользователем for6to9
Опубликовано

Спасибо, буду изучать новую для себя информацию )

А разве TPROXY это не "transparent proxy"? В режиме прозрачного прокси аналогичным способом легко получилось организовать выборочную маршрутизацию через тор и shadow socks, а вот с sing-box пока не получилось

Конфиг sing-box обычный из примера, и нормально работает для socks5 в качестве inbound:

{
  "log": {
    "disabled": false,
    "level": "info",
    "timestamp": true
  },
  "outbounds": [
    {
      "type": "trojan",
      "tag": "proxy-out",
		...
    },
    {
      "type": "direct",
      "tag": "direct-out"
    }
  ],
  "inbounds": [
    {
      "type": "tproxy",
      "tag": "tproxy-in",
      "listen_port": 7895,
      "listen": "0.0.0.0"
    },
  ],
  "route": {
    "rules": [
      {
        "outbound": "direct-out",
        "protocol": "dns"
      },
    ],
    "final": "proxy-out",
    "auto_detect_interface": true
  }
}

 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.