Redsocks2 не может пересылать пакеты udp

Я использую (socks5)redsocks2(из https://github.com/semigodking/redsocks) на стороне клиента для перенаправления всех пакетов данных на промежуточный шлюз вместо сервера приложений напрямую. Это хорошо работает в случае пакетов tcp. Но в случае пакетов UDP это не работает вообще. Проблема заключается в том, что как только UDP-пакет приходит в redsocks, адрес и порт назначения изменились на локальный адрес и порт redsocks.

Я использую ниже правила IPTable для пересылки пакетов:-

iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -p tcp --dport  7 -j RETURN 
iptables -t nat -A REDSOCKS -p tcp -d xxx.xxx.xxx.xxx --dport 1080 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 0.0.0.0 -j RETURN
iptables -t nat -A REDSOCKS -p udp --dport  53 -j RETURN 
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports YYYYY
iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports ZZZZZ
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
iptables -t nat -A OUTPUT -p udp -j REDSOCKS

** xxx.xxx.xxx.xxx = intermediate gateway server address
** YYYY, ZZZZ = local ports for redsocks in client device

Я использую ниже файл конфигурации redsocks:

base { 
    log_debug = off; 
    log_info = off; 
    daemon = on; 
    redirector = iptables; 
} 

redsocks {
    local_ip = 127.0.0.1; 
    local_port = YYYYY; 
    ip = xxx.xxx.xxx.xxx; 
    port = MMMM; 
    type = socks5; 
    login = "login"; 
    password = "password"; 
}

redudp {
    local_ip = 0.0.0.0; 
    local_port = ZZZZZ; 
    ip = xxx.xxx.xxx.xxx; 
    port = MMMM; 
    type = socks5;
    login = "login"; 
    password = "password"; 
    udp_timeout = 30;udp_timeout_stream = 180;
} 

Насколько я знаю, TPROXY работает на PREROUTING. Он не работает с пакетом, сгенерированным с локальной машины (я имею в виду цепочку OUTPUT). TPROXY может работать на маршрутизаторе, но не может работать на исходной машине.

Пожалуйста, предложите, как мы можем справиться с этим сценарием для пересылки пакетов udp через redsocks2.

2 ответа

Попробуйте использовать перевод Google, чтобы прочитать китайский ReadMe по адресу https://github.com/semigodking/redsocks/wiki

Если вы используете правило перенаправления, адрес назначения в пакетах будет перезаписан, и если вы попытаетесь прочитать адрес назначения из пакета, используя IP_ORIGDSTADDR, вы только прочитаете адрес обратной связи.

Чтобы получить исходный адрес назначения, вы, вероятно, можете попытаться выполнить синтаксический анализ файла /proc/net/nf_conntrack (совпадает с исходным IP-адресом и портом), который содержит информацию обо всех соединениях. Но у вас могут возникнуть проблемы, если у вас есть несколько адресатов для одного и того же (srcIP,srcPort) и, следовательно, это не лучший способ. Но стоит попробовать, если у вас нет такой возможности.

Другие вопросы по тегам