В одном офисе имеется простенький роутер, работает он и бед не знает. Но выяснился досадный факт - максимальное число правил проброса портов может быть всего 16 штук. Что по нынешним меркам, совсем мало. Один инсайдер дал намек, что для обхода этого ограничения подойдет решение в виде использования DMZ. Кто такой DMZ, что он делает и откуда он взялся - я нифуя фуя). Хотя вру, про этого зверя я читал в бородатом 2007 году, но знания так и остались в теории, как впрочем и многое другое. Мало читать, надо еще и применять...
Простыми словами о DMZ: Это такой хост внутри локальной сети, которому открыт полный прямой доступ из внешней сети Интернет. Мы можем поднять виртуалку и поместить ее IP адрес в зону DMZ на нашем роутере TPLINK. Тем самым она станет доступна всему интернету по всем портам от 0 до 65535. Разумеется после таких настроек роутера, возможно перестанут работать правила проброса которые прописывались до этого.
В общем, смысл DMZ в моем случае таков: Я указываю в настройках роутера TPLINK в разделе DMZ адрес внутренней машины, например 192.168.1.100. Далее на этой машине настраивается фаервол iptables и делается проброс портов до нужной машины внутри сети, причем ограничений на создания правил проброса нет. То есть мы можем создать правил больше чем 16.
По сути у нас в локальной сети появляется шлюз на Linux помимо роутера TPLINK.
На самом деле это костыль, проще конечно заменить TPLINK на более лучший аппаратный или программный вариант.
Сам виновник записки:
Картинка 1. Роутер TPLINK TD-W8980
Само решение.
Указываем хост который будет доступен из интернета (DMZ) в роутере TPLINK
Я для примера указал 192.168.0.31, на этой машине мы поднимем Linux (CentOS).
Как только подняли Linux, прописываем в нем правила iptables:
Открываем файл /etc/sysconfig/iptables и вписываем правила внизу.
# vi /etc/sysconfig/iptables
:FORWARDING
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
:NAT
-A PREROUTING -p tcp -m tcp --dport 23 -j DNAT --to-destination 192.168.0.126:23-A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.31-A POSTROUTING -d 192.168.0.126/32 -p tcp -m tcp --dport 23
# iptables-restore < /etc/sysconfig/iptables
# service iptables save
Здесь мы имеем внутренний хост 192.168.0.126, на котором включен telnet server, эта служба работает на порту 23. Если внешний клиент выполнит команду (123.123.123.123 - это внешний IP роутера TPLINK.):
telnet 123.123.123.123 23
То он попадет на внутренний хост 192.168.0.126.
Далее включаем пересылку трафика через наш хост:
Открываем файл /etc/sysctl.conf и ставим 1.
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1