Задать вопрос
danielnewman
@danielnewman
Front-end

Какой правильный iptables позволит не зацикливаться при выходе через проброшенный порт?

Лежит на сервере-хосте горка KVM-гостей, гости ломятся через 80-й порт наружу, что бы получить апдейты пакетов rpm/yum..., вытянуться curl и т.д. Но все эти запросы запиливаются к локальному http­-серверу по ряду причин в iptables хост-машины:
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.110:80

Это выглядит как-то так:


+----------------------------+
| Debian KVM-Host            |       iptables -t nat -I PREROUTING -p tcp \
| eth0:  5.5.5.5             |         --dport 80 -j DNAT --to-destination 10.10.10.110:80
| vmbr1: 10.10.10.1          |
+--------+-------------------+
         |
+--------+------------+
| nginx  10.10.10.110 |
+---------------------+
    |      |      | 
    |      |      |    +---------------------+
    |      |      +----| Guest1 10.10.10.123 |
    |      |           +---------------------+
    |      |   +---------------------+
    |      +---| Guest1 10.10.10.122 |
    |          +---------------------+
    |   +---------------------+
    +---| Guest1 10.10.10.121 |
        +---------------------+


Допустим, дергаю я wget yandex.ru с Guest3 10.10.10.123, а у меня в nginx-прокси на 10.10.10.110 все запросы незнакомые перенаправляются на Guest2 10.10.10.122, а на нем — Plesk, и вот мне этот самый плеск сообщает, что страница по умолчанию для этого сервера… и отдает мне её. Да и сам 10.10.10.110 все попытки выйти из сети, согласно правилу хост-машины, через себя пропускает и на 10.10.10.122 взад шлет. Сами интернет-адреса правильно ресолвятся (другие порты), но кого это интересует.

Так вот, как «разлупить» мне эту ситуацию — не вразумею. Помогите, пожалуйсталюдидобрые, с таким правилом, что бы все внешние адреса !10.10.10.0/24 слались через NAT и во вне хост-машины.
  • Вопрос задан
  • 3936 просмотров
Подписаться 2 Оценить 4 комментария
Решения вопроса 1
Akint
@Akint
iptables -t nat -I PREROUTING -p tcp -d 5.5.5.5 --dport 80 -j DNAT --to 10.10.10.110:80
Все tcp пакеты, пришедшие 5.5.5.5:80, будут перенаправлены на 10.10.10.110:80

iptables -t nat -I POSTROUTING -p tcp -s 10.10.10.0/24 --dport 80 -o eth0 -j SNAT --to 5.5.5.5
Гостям, ломящимся наружу на 80й порт, менять адрес источника на 5.5.5.5

Оно?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
oldbay
@oldbay
А если так:
iptables -t nat -I PREROUTING -p tcp -d 10.10.10.0/24 --dport 80 -j DNAT --to-destination 10.10.10.110:80
или для диапазона
iptables -t nat -I PREROUTING -p tcp -m iprange --dst-range 10.10.10.120-10.10.10.150 --dport 80 -j DNAT --to-destination 10.10.10.110:80
*10.10.10.120- 10.10.10.150 -диапазон выделенный под гостевые хосты.
Ответ написан
danielnewman
@danielnewman Автор вопроса
Front-end
Опишу, как я сам понимаю мой iptables.

iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.110:80

добавить в таблицу nat следующее правило для приходящих пакетов:

PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.110:80

«со всеми пакетами протокола tcp, пришедшими на 80-й порт (может тут явно надо указывать „пришедшие извне пакет“ или адрес интерфейса 5.5.5.5 указать надо?) поступить следующим образом»

-j DNAT --to-destination 10.10.10.110:80

«перейти во внутреннюю цепочку правил: „изменить адрес назначения пакетов на 10.10.10.110:80“»

Правильно пока?
Ответ написан
Комментировать
forefinger
@forefinger
# фовард приходящего "снаружи"
-t nat -A PREROUTING -d 5.5.5.5/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.110:80
# фовард приходящего "изнутри" ( опционально )
-t nat -A PREROUTING -d 10.10.10.1/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.110:80
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект