Что я сделал не так в iptables?

Вопрос или проблема

Я пытаюсь перенаправить весь трафик на свою точку доступа ShadowSocks tproxy, настраивая iptables, однако трафик не только не перенаправляется на прокси, я не думаю, что это что-то сделало. Я выполнил следующие команды, чтобы настроить iptables и запустить ShadowSocks Tproxy(ss-redir). Обратите внимание, что я следовал странице Github Shadowsocks

# Создать новую цепочку
iptables -t nat -N SHADOWSOCKS
iptables -t mangle -N SHADOWSOCKS

# Игнорировать адреса вашего сервера shadowsocks
# Это очень ВАЖНО, будьте осторожны.
iptables -t nat -A SHADOWSOCKS -d ServerIP -j RETURN

# Игнорировать локальные сети и любые другие адреса, которые вы хотите обойти прокси
# Смотрите Википедию и RFC5735 для полного списка зарезервированных сетей.
# Смотрите ashi009/bestroutetb для высоко оптимизированного списка маршрутов CHN.
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN

# Все остальное должно быть перенаправлено на локальный порт shadowsocks
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345

# Добавьте любые правила UDP
ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01

# Примените правила
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t mangle -A PREROUTING -j SHADOWSOCKS

# Запустите shadowsocks-redir
ss-redir -s SeverIP -p SeverPort -m chacha20-ietf-poly1305 -k 6d2b5b66-0d3f-4189-a547-501eb658879a -b 127.0.0.1 -l 12345 --no-delay -v -u < /dev/null &>>/var/log/ss-redir.log &

Все команды не вернули ошибку, поэтому я проверил текущую конфигурацию

$ iptables -t nat -L -n -v
Цепочка PREROUTING (политика ACCEPT 524 пакетов, 204K байт)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SHADOWSOCKS  6    --  *      *       0.0.0.0/0            0.0.0.0/0           

Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target     prot opt in     out     source               destination         

Цепочка OUTPUT (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target     prot opt in     out     source               destination         

Цепочка POSTROUTING (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target     prot opt in     out     source               destination         

Цепочка SHADOWSOCKS (1 ссылка)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     0    --  *      *       0.0.0.0/0            120.233.31.53       
    0     0 RETURN     0    --  *      *       0.0.0.0/0            0.0.0.0/8           
    0     0 RETURN     0    --  *      *       0.0.0.0/0            10.0.0.0/8          
    0     0 RETURN     0    --  *      *       0.0.0.0/0            127.0.0.0/8         
    0     0 RETURN     0    --  *      *       0.0.0.0/0            169.254.0.0/16      
    0     0 RETURN     0    --  *      *       0.0.0.0/0            172.16.0.0/12       
    0     0 RETURN     0    --  *      *       0.0.0.0/0            192.168.0.0/16      
    0     0 RETURN     0    --  *      *       0.0.0.0/0            224.0.0.0/4         
    0     0 RETURN     0    --  *      *       0.0.0.0/0            240.0.0.0/4         
    0     0 REDIRECT   6    --  *      *       0.0.0.0/0            0.0.0.0/0            редирект на порты 12345

После всей этой настройки я ожидал увидеть, что iptables перенаправляет все мои сети на локальный сервер и порт shadowsocks 12345, но ничего не было перенаправлено, все пакеты просто маршрутизировались идеально, как и до установки NAT. Конфигурация NAT, похоже, ничего не сделала.

Ответ или решение

Основные ошибки в конфигурации iptables для маршрутизации через ShadowSocks TProxy

При настройке iptables для маршрутизации трафика через ShadowSocks с использованием TProxy, можно столкнуться с различными проблемами. Рассмотрим ошибки и недочеты в приведенной конфигурации, которые могут препятствовать корректной работе этого решения.

1. Правильность правил маршрутизации

Ваш регистратор iptables создан, и вы создали два новых цепочки (SHADOWSOCKS) для NAT и mangle, что является правильным шагом. Однако вы не указали, чтобы пакеты, соответствующие определённым условиям, передавались в эти цепочки.

  • Убедитесь, что в цепочке PREROUTING для NAT ваши пакеты действительно соответствуют условиям, которые вы задали.
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS

Эта команда должна включать пакет, если он соответствует правилам в цепочке SHADOWSOCKS. Если она не сработает, это может значить, что пакет TCP не подходит под ваши условия.

2. Проверка IP-адресов и диапазонов

Проверьте, правильно ли вы указали IP-адрес вашего сервера ShadowSocks. Обратите внимание, что вы используете ServerIP в своих правилах, убедитесь, что вы заменили это на фактический адрес вашего сервера.

3. Отсутствие правила для UDP трафика

Вы включили правило для маршрутизации UDP трафика, однако, если у вас нет просьбы на UDP в правилах NAT, пакеты могут не обрабатываться корректно. Необходимо добавить маршрутизацию для других UDP портов, которые планируете использовать.

iptables -t mangle -A PREROUTING -p udp --dport <ваш_порт> -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01

4. Проверка на наличие ошибок

По итогам конфигурации вы можете проверить текущие настройки правил с помощью следующей команды:

iptables -t nat -L -n -v
iptables -t mangle -L -n -v

Обратите внимание на количество пакетов и байт, проходящих через каждое правило. Если все равно ноль, это значит, что правила не применяются.

5. Правило Маркировки Пакетов

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

iptables -t mangle -A PREROUTING -p tcp -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01

6. Запуск сервера

Убедитесь, что сервер ss-redir запущен правильно. Обратите внимание на ошибки в выводе лога, которые могли бы указать на неправильную работу:

ss-redir -s <ServerIP> -p <ServerPort> -m chacha20-ietf-poly1305 -k <ваш_ключ> -b 127.0.0.1 -l 12345 --no-delay -v -u < /dev/null &>> /var/log/ss-redir.log &

Заключение

Эти рекомендации могут помочь вам идентифицировать и устранить основные ошибки в конфигурации iptables. Убедитесь, что все правила правильно применяются, проверьте адреса и порты, и внимательно следите за выводами логов вашего приложения и настроек iptables. Если после всех проверок проблема не будет устранена, возможно, стоит рассмотреть вопросы совместимости с версией операционной системы или обновление пакетов.

Оцените материал
Добавить комментарий

Капча загружается...