У меня два шлюза в моей подсети. 192.168.1.2 - основной 192.168.1.1 - вторичный (да, это не ошибка)
Итак, я использую 192.168.1.2 везде в качестве маршрута по умолчанию
Можно ли настроить danted, чтобы он перенаправлял исходящие соединения на вторичный шлюз (192.168.1.1) а основная система будет использовать главный шлюз? Или мне нужно сделать некоторые настройки с помощью iptables для этого?
Другое возможное решение - создать контейнер lxc с другим сетевым стеком, но я пытаюсь достичь той же цели на rpi с небольшим объемом оперативной памяти и без подобных избыточных решений .
Мне интересно, поддерживает ли он это из коробки, или, может быть, я могу разделить сетевой стек без какой-либо виртуализации? (возможно, создайте виртуальный интерфейс с другим шлюзом, а затем передайте этот вторичный интерфейс в danted)
Спасибо
Итак, мой главный шлюз на этой машине - 192.168.1.2. Я не хочу перенаправлять весь трафик от конкретного пользователя через другой шлюз 192.168.1.1
Создание нового пользователя, который будет перенаправлен на другой шлюз
useradd -m proxy
Добавление новой таблицы маршрутизации
echo "201 gw1" >> /etc/iproute2/rt_tables
добавление правила IP, чтобы все помеченные пакеты переходили в новую таблицу маршрутизации
ip rule add fwmark 0x1 table gw1
ip route add default via 192.168.1.1 dev eth0 table gw1
, помечая все пакеты от прокси-сервера пользователя (и позволяя нашим подсети для связи без перенаправления)
iptables -A OUTPUT -t mangle -o eth0 ! -d 192.168.1.0/24 -m owner --uid-owner proxy -j MARK --set-mark 1
Таким образом, пользовательский прокси будет использовать отдельную таблицу маршрутизации
теперь весь IP-трафик работает нормально, но DNS-запросы не работают
curl -H "Host: ifconfig.me" 216.239.32.21
DNS-запросы не работают, потому что он пытается использовать 127.0 .0.1: 53, который маршрутизируется через главный шлюз
, теперь перенаправляет также трафик dns на тот же шлюз, не позволяя ему касаться 127.0.0.1:53
iptables -t nat -A OUTPUT -m owner --uid-owner proxy -p udp --dport 53 -j DNAT --to 192.168.1.1:53
iptables -t nat -A OUTPUT -m owner --uid-owner proxy -p tcp --dport 53 -j DNAT --to 192.168.1.1:53
. Вы также можете указать 8.8.8.8, и он будет пропущен через 192.168. 1.1, основная идея состоит в том, чтобы убрать его с локального кэширующего DNS-сервера
, теперь DNS-запросы маршрутизируются нормально, вы можете проверить это с помощью сниффера, однако dig по-прежнему показывает DNS-серверы из шлюза по умолчанию
curl ifconfig.me
, делающего запрос (или любое другое приложение) чтобы использовать эти правила, запустив его как прокси-пользователя в date.conf
#user.privileged: root
user.notprivileged: proxy
#user.libwrap: libwrap
, и теперь вы можете добавить строки ip rule, ip route и iptables на rc.local и укажите в браузере danted socks server. Весь исходящий трафик будет направлен на шлюз 192.168.1.1