Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Перенаправление трафика от хоста через второй шлюз  (Прочитано 2275 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DarkArchangel

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Есть стационарник с тремя сетевыми картами для раздачи инета. Задача "одна карточка на LAN (192.168.0.0/24, 192.168.0.1 адрес шлюза), вторая на WAN" уже давно и успешно решена. Ручная адресация, шлюз и ДНС-сервер у клиентов указаны как 192.168.0.1.

Захотелось мне в виртуалке (virtualbox) поднять дополнительного провайдера и тупо переводить в нужный момент все обращения клиентов со 192.168.0.1 на 192.168.0.20, сделав мосты к карточке LAN (и сделав адресом второго шлюза 192.168.0.20) и второй WAN. С матюками по трём руководствам чёртов билайн в виртуалке поднялся, перестав вешать систему наглухо через минуту после работы. Обмен пакетами между LAN и виртуальным шлюзом тоже замечательно проходит, локально со шлюза в интернет выпускает (проверено выходом в инет с помощью lynx)

Дальше вроде всё просто:
на основном шлюзе днатим клиента (например 192.168.0.2) на второй шлюз, #iptables -t nat -A PREROUTING -s 192.168.0.2 -j DNAT --to-destination 192.168.0.20
...а на резервном #echo 1 > /proc/net/ipv4/ip_forward; iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
И вот вроде бы клиент, обращающийся к основному шлюзу, должен прозрачно вылетать в инет через резервный, но не пускает. Мало того: после dnata на хосте (основном шлюзе) пакеты приходят, конечно, на второй шлюз, но приходят без подменённого адреса получателя:
17:07:13.124009 IP 192.168.0.2.33513 > 192.168.0.1.domain: 19413+ A? database.clamav.net. (37)
И ответы на попытки пингования внешних ресурсов приходят также от шлюза (192.168.0.20), а не от собственно ресурса.

Хост -- ubuntu 14.04 desktop, резервный шлюз -- ubuntu 16.04 server, доставлено ядро 4.6 с ubuntu kernel ppa, iptables ванильные и там, и там, xl2tpd для билайна поставлен из репозиториев.
ЧЯДНТ?
« Последнее редактирование: 15 Октября 2016, 19:58:59 от DarkArchangel »
asus p8h67/intel xeon e3-1230v2+Scythe Mugen/8GB PC12600/AMD Radeon 6770, open-source driver/2tb Hitachi deskstar 7200 rpm + Goodram Iridium 120G, Lubuntu 24.04

Оффлайн DarkArchangel

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Сам спросил, сам ответил.
В общем отключился основной провайдер, трафик для всей локалки надо с хоста-шлюза перенаправить на резервный шлюз. По минимуму получится прмерно так.
Хост
#делаем дефолтным шлюзом резервный, все пакеты посыплются туда
ip route add default via 192.168.0.20
#перенаправляем все udp-запросы
iptables -t nat -I PREROUTING -p udp -s 192.168.0.0/24 -d 192.168.0.1 --dport 53 -j DNAT --to-destination 192.168.0.20:53
#подгоняем размер MSS выходящих наружу пакетов под значение параметра у выходного интерфейса ppp0
iptables -A FORWARD -t mangle -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
#пакетам иногда тоже хочется праздника, устраиваем маскарад для тех, кто покидает нашу сеть.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Резервный шлюз.
#настройки аналогичны настройкам основного хоста
iptables -A FORWARD -t mangle -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
#подменяем адрес исходящих пакетов для ответов на перенаправленные от хоста запросы
#больше не будет ругаться, что ресолв приходит от другого ресурса
iptables -t nat -I POSTROUTING -p udp -s 192.168.0.20 --sport 53 -j SNAT --to-source 192.168.0.1:53
В таком виде всё бегало до тех пор, пока не поднялся ppp0-интерфейс на хосте-шлюзе и не подменил default gateway снова на ppp0.

Для решения изначальной задачи, когда надо выпустить через второй шлюз лишь трафик с отдельного хоста, надо промаркировать пакеты от через iptables и отправить их в обработку через дополнительную таблицу маршрутизации, где default gateway указан резервный шлюз. С ходу не взлетело, но, думаю, осилю и заработает.
asus p8h67/intel xeon e3-1230v2+Scythe Mugen/8GB PC12600/AMD Radeon 6770, open-source driver/2tb Hitachi deskstar 7200 rpm + Goodram Iridium 120G, Lubuntu 24.04

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
О маркировке пакетов http://anr-daemon.livejournal.com/1655.html
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.