четверг, 7 октября 2010 г.

Простой Port Mapping

Эта заметка из серии "Записки склерозника" :) Так что я не буду вдаваться в подробности, тем более суть всей заметки сводится к двум командам для iptables.

Предыстория: под виндой в UserGate раньше иногда пользовался функцией portmapping. Трудно в двух словах описать что это такое, поэтому лучше приведу живой пример.

Итак, в сети у нас есть 3 машины:
1. Сервер, на котором крутится сайт (80-й порт) IP-адрес машины 192.168.0.1
2. Рабочая станция. Нужно с неё получить доступ к сайту на вышеуказанном сервере. IP-адрес машины: 192.168.1.1
3. Шлюз/сетевой экран (стоит между сервером и рабочей станцией, имеет два сетевых интерфейса, смотрящий в разные сети). IP-адреса: 192.168.0.2 (смотрит в сторону сервера) и 192.168.1.2 (в сторону рабочей станции)

На рисунке все понятно и наглядно показано.

Можно, конечно, назначить 192.168.1.2 шлюзом по умолчанию для рабочей станции и настроить маршрутизацию, чтобы спокойно был виден весь сервер, но мне нужно чтобы был доступ только к сайту.
реализация проста, вот три строчки кода:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -p tcp --dst 192.168.1.2 --dport 81 -j DNAT --to-destination 192.168.0.1:80
# iptables -t nat -I POSTROUTING -p tcp --dst 192.168.0.1 --dport 80 -j SNAT --to 192.168.0.2
Т.е., чтобы попасть на сайт, расположенный на сервере (192.168.0.1), в браузере рабочей станции нужно просто ввести адрес шлюза (192.168.1.2:81)

Если на шлюзе использовать 80-й порт, то в браузере можно просто писать адрес, не указывая порт. Здесь я использовал 81-й порт для наглядности и на тот случай, если он вдруг будет занят.

Написано по мотивам этой страницы

3 комментария:

  1. привет. хорошо пишешь, просто и доступно. может подскажешь что и где нужно добавить, если маппинг нужен для 2-х портов, и внутри сетки 7-8 машин?

    ОтветитьУдалить
  2. если нужно пробросить 2 или более портов, то вторую и третью строчки команд выполните для других портов.
    могу предположить, что речь идет о пробросе 25-го и 110-го портов для работы почты. Тогда получается вот так:
    iptables -t nat -A PREROUTING -p tcp --dst 192.168.1.2 --dport 26 -j DNAT --to-destination 192.168.0.1:25
    iptables -t nat -I POSTROUTING -p tcp --dst 192.168.0.1 --dport 25 -j SNAT --to 192.168.0.2
    iptables -t nat -A PREROUTING -p tcp --dst 192.168.1.2 --dport 111 -j DNAT --to-destination 192.168.0.1:110
    iptables -t nat -I POSTROUTING -p tcp --dst 192.168.0.1 --dport 110 -j SNAT --to 192.168.0.2

    26 и 111 порты стоят умышленно, чтобы показать, что это порты на внутреннем интерфейсе. Если на этой машине нет запущенных SMTP/POP3 серверов, то можно использовать 25 и 110

    ОтветитьУдалить
  3. Этот комментарий был удален администратором блога.

    ОтветитьУдалить