Как перенаправить трафик, исходящий с определённого IP-адреса, на прокси-сервер с помощью iptables?

Добрый день. У меня есть VPS с настроенным прокси и роутер на OpenWRT версии 19.07.10, на котором установлен REDSOCKS. В текущем скрипте, приведенном ниже, весь трафик с роутера, кроме локального, перенаправляется через прокси. 

```bash
START=90 
INTERFACE=br-lan 
PORT=1337 

# Проверка существует ли конфигурация 
[ -e "/etc/redsocks.conf" ] || exit 0 

iptable_start() { 
    /bin/echo -n "Запуск iptables для обхода прокси ..." 
    # Команды iptables 
    iptables -t nat -N REDSOCKS 
    iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN 
    # iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN 
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN 
    iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN 
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN 
    iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports ${PORT} 
    iptables -t nat -A PREROUTING -i ${INTERFACE} -p tcp -j REDSOCKS 
    iptables -A INPUT -i br-lan -p tcp --dport ${PORT} -j ACCEPT 
    /bin/echo " готово" 
}
```

Как мне изменить этот скрипт, чтобы направлять только конкретный трафик по определенным IP-адресам и подсетям, например, 172.67.182.196, 104.21.32.39, 104.21.50.150, 172.67.163.237 и подсети 74.125.205.0/24, 142.251.1.0/24, 64.233.161.0/24 через прокси, а весь остальной трафик оставить без изменений?
  • 30 января 2025 г. 4:24
Ответы на вопрос 2
Чтобы перенаправить трафик только с определенных IP-адресов и подсетей через прокси-сервер с помощью iptables, можно изменить ваш скрипт, добавив правила, которые будут фильтровать и направлять только указанные адреса. 

```bash
START=90 
INTERFACE=br-lan 
PORT=1337 

# Проверка существует ли конфигурация 
[ -e "/etc/redsocks.conf" ] || exit 0 

iptable_start() { 
    /bin/echo -n "Запуск iptables для обхода прокси ..." 
    
    # Команды iptables 
    iptables -t nat -N REDSOCKS 
    
    # Возвращаем трафик на локальные адреса
    iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN 
    iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN 
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN 
    iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN 
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN 

    # Перенаправляем трафик только с указанных IP и подсетей
    iptables -t nat -A REDSOCKS -d 172.67.182.196 -j REDIRECT --to-ports ${PORT}
    iptables -t nat -A REDSOCKS -d 104.21.32.39 -j REDIRECT --to-ports ${PORT}
    iptables -t nat -A REDSOCKS -d 104.21.50.150 -j REDIRECT --to-ports ${PORT}
    iptables -t nat -A REDSOCKS -d 172.67.163.237 -j REDIRECT --to-ports ${PORT}

    iptables -t nat -A REDSOCKS -d 74.125.205.0/24 -j REDIRECT --to-ports ${PORT}
    iptables -t nat -A REDSOCKS -d 142.251.1.0/24 -j REDIRECT --to-ports ${PORT}
    iptables -t nat -A REDSOCKS -d 64.233.161.0/24 -j REDIRECT --to-ports ${PORT}

    # Применяем правила к входящему трафику
    iptables -t nat -A PREROUTING -i ${INTERFACE} -p tcp -j REDSOCKS 
    iptables -A INPUT -i br-lan -p tcp --dport ${PORT} -j ACCEPT 
    
    /bin/echo " готово" 
}
```

### Объяснение изменений:
1. **Фильтрация трафика**: Я удалил все правила, которые перенаправляли трафик, кроме указанных IP-адресов и подсетей.
2. **Каждое правило**: Для каждого IP и подсети добавлено правило, которое перенаправляет трафик на указанный порт. 
3. **Общие адреса**: Правила для локальных адресов и multicast оставлены, чтобы не перенаправлять внутренний трафик.

### Замечания
- Убедитесь, что ваш прокси-сервер настроен правильно и слушает заданный порт.
- Возможно, потребуется адаптировать другие части скрипта под ваши нужды или тестировать его на отдельной среде перед использованием на рабочем сервере.
В приведенном скрипте весь трафик перенаправляется на порт прокси: 
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports ${PORT}

Если все перенаправлять не требуется нужно указать трафик к каким адресам/подсетям перенаправлять т.е. вместо выше приведенной строчки указать примерно следующее:

iptables -t nat -A REDSOCKS -d 172.67.182.196 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 104.21.32.39 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 104.21.50.150 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 172.67.163.237 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 74.125.205.0/24 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 142.251.1.0/24 -j REDIRECT --to-ports ${PORT}
iptables -t nat -A REDSOCKS -d 64.233.161.0/24 -j REDIRECT --to-ports ${PORT}
Похожие вопросы