snat, dnat, iptables... (два внешних ip-адреса)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

pelmen
Сообщения: 1268
ОС: debian

snat, dnat, iptables...

Сообщение pelmen »

Два внешних ip-адреса из одной подсети висят на одном сетевом интерфейсе (eth0 и eth0:1 соответственно). Настроен проброс портов так, что если коннектятся снаружи на eth0, то перебрасявается на другой внешний ip адрес (вообще другой, допустим яндекса). Ну и соответственно snat на ip eth0, потому, что если его не делать, то ответ от яндекса будет идти напрямую клиенту и он его отбросит, т.к. "не заказывал". Как сделать так, чтоб если коннектятся на ip eth0:1, то и snat делался на ip eth0:1 ? (переброс пойдет на тот же яндекс, это для того, чтоб "с разных ip-адресов" на яндекс заходить)
Если не понятно, то вот так я сначала хотел изложить мысль:
есть линукс с одним сетевым интерфейсом, на нем eth0 - внешний ip, eth0:1 - тоже внешний другой ip из той же подсети. Я сделал такие правила:
$IPT -t nat -A PREROUTING -p udp --dport 27015:27017 -j DNAT --to-destination $cs-server
$IPT -t nat -A POSTROUTING -p udp --dport 27015:27017 -j SNAT --to-source $my_eth0_ip
Таким образом, я играя в контру на сервере из дома могу сделать connect $my_eth0_ip и зайти на тот же сервер, если бы сделал connect $cs-server. Это на случай, когда банят по ip-адресу :)
p.s. cs-server - не внутренний ip!!! это тоже внешний, где-то хз где. у линукс машины нет внутренней сети.
Так вот встал вопрос (не то, чтобы это реально нужно, просто любопытно, как это сделать), если банят и этот ip тоже, то как я могу воспользоваться вторым eth0:1 ip? Т.е. нужно сделать правило(а), которое бы подставляло SNAT --to-source $my_eth0_ip в том случае, если prerouting шел именно на $my_eth0_ip, а если на $my_eth0-1_ip, тогда snat --to-source $my_eth0-1_ip. Это как-то с цепочками наверное надо мутить или mark делать?
Но потом передумал.
Спасибо сказали:
stvorl
Сообщения: 6

Re: snat, dnat, iptables...

Сообщение stvorl »

pelmen писал(а):
21.12.2008 11:53
коннектятся на ip eth0:1, то и snat делался на ip eth0:1 ? (переброс пойдет на тот же яндекс, это для того, чтоб "с разных ip-адресов" на яндекс заходить)


Надо попробовать такую стратегию:

1) в mangle PREROUTING ловить входящие пакеты по нашим специфических соединений и делать им mark - разный, в зависимости от того, на какой интерфейс они первоначально от твоего пользовательского компа пришли.
2) в nat PREROUTING эти соединения направлять DNAT-ом на целевой узел (яндекс, там, или cs-server)
3) в nat POSTROUTING эти соединения в зависимости от заданного в (1) mark-а SNAT-ом выпускать от одного или второго реального адреса.
4) на пути пакетов обратно iptables сам "раскрутит" DNAT и SNAT таким образом, что пакет

Чисто теоретически, для компьютера с одним многоадресным интерфейсом, должно прокатить. Если бы интерфейсы внешние были разные (eth0, eth1), с разными шлюзами, то геморроя было бы больше, т.к. все исходящие пакеты по дефолту заворачиваются в интерфейс основного шлюза, где пакетам от другого интерфейса были бы не рады, и пришлось бы подключить iproute, чтобы перехватить маршрутизацию.
Здесь же - предположительно указанный момент пофиг.

Возможно я ошибаюсь, и геморрой возникнет и так :-)
Возможно я ошибаюсь, и есть куда более простое решение.
Специфическая задача: если бы ты точно сказал - желаешь ли с двух адресов мучать Яндекс, чтобы не блокировал по частоте запросов, или играть в cs в два лица с одной тачки - возможно было бы проще подобрать решение ;-)
Спасибо сказали:
Аватара пользователя
guglez
Сообщения: 394
ОС: GNU/Linux

Re: snat, dnat, iptables...

Сообщение guglez »

А разве IPTABLES умеет работать с виртуальными интерфейсами?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: snat, dnat, iptables...

Сообщение pelmen »

Может.
Нужно играть в кс из дома на сервере, если забанили, коннектишься на первый айпи своего сервера (который перебрасывает тебя на сервер кс), если и его забанили, коннектишься на второй айпи :)
Спасибо сказали: