From: Dmitry A. Koptev <dimez@nm.ru.>
Date: Mon, 17 Oct 2005 18:21:07 +0000 (UTC)
Subject: Проброс порта внутрь сети через NAT в Linux
Оригинал: http://dimez.nm.ru/docs/nat/
ДАНО: Локальная сеть, роутер с 2-мя сетевыми карточками(под
управлением Linux), в одну карточку включен шнур, по которому идёт
интернет :-) Из роутера идёт второй шнур, который раздаёт этот
интернет всей локалке.
НАДО: "Пробросить" порт(либо вообще "выкинуть" машину наружу) внутрь
локалки, то-есть обеспечить доступ извне(из дикого интернета) к
какой-то локальной машине.
РЕШЕНИЕ: Сразу скажу, что на ядрах 2.2.x это нормально не получается,
только используя утилиты iproute2 Алексея Кузнецова(сам не пробовал,
но, говорят, получается). Так что я рассматриваю вариант kernel-2.4.x
+ iptables.
Ставим ЯДРО (посвежее http://www.kernel.org/pub/linux/kernel/), в
ядре включаем всё, что касаемо iptables, ставим IPTABLES
http://www.netfilter.org/ (если ещё не поставлены, кстати, рекомендую
ставить тоже самые свежие)
Обозначения
$EXT_R_IP - внешний IP роутера
$LOCAL_IP - внутренний "фэйковый" адрес машины, которую надо "выкидывать" наружу
$PORT1 - Порт, на который будут заходить извне и попадать на локальную машину
$PORT2 - Порт, который "выбрасывается" наружу(например, 80 - http, либо 21 - ftp)
Прежде чем "выкидывать" порт наружу - имеет смысл поставить на эту
машину FIREWALL, либо поставить новую версию программы(web-сервер или
прочее), которую случайно не поломают.
Вариант #2 - требуется вообще "выкинуть" машину наружу, но
административными мерами(то есть, не трогая самой машины)
Тут ЕЩЁ БОЛЬШЕЕ ПРЕДУПРЕЖДЕНИЕ!!!
Это гораздо опаснее, чем обычный "проброс" порта - так что ставить
нормальный FIREWALL просто необходимость, а не прихоть!!!
Обозначения
1) $IFACE - внешний сетевой интерфейс на роутере(например, eth0)
2) $NEW_IP - новый IP, на который будем "сажать" "выведенную" машину из локалки
(не может же она жить без IP :)(Если провайдер дал Вам больше одного внешнего I
P-адреса)
3) $BC,$NM,$GW - соответственно, broadcast,netmask,gateway, который выдаёт
провайдер(в общих чертах)
4) $LOCAL_IP - тоже самое, что и вверху
Сначала надо сделать alias(у нас же нет третьей сетевой карточки)
сетевого интерфейса(все команды - от рута, естественно)