Jump to content

Recommended Posts

Posted

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

Прошу подсказать с реализацией выборочной маршрутизации адресов из заданного 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 шли сразу во внешний интерфейс, не создавая петли.

Posted

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

Posted
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.

Posted (edited)

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;

 

Edited by for6to9
Posted

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

А разве 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
  }
}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.