Проброс порта внутрь сети через NAT в Linux средствами iptables

Обозначения

$EXT_R_IP — внешний IP роутера
$LOCAL_IP — внутренний «фэйковый» адрес машины, которую надо «выкидывать» наружу
$PORT1 — Порт, на который будут заходить извне и попадать на локальную машину
$PORT2 — Порт, который «выбрасывается» наружу(например, 80 — http, либо 21 — ftp)
На роутере говорим следующие команды(от рута)


# iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport $PORT1 -j DNAT --to-destination $LOCAL_IP:$PORT2
# iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2 -j ACCEPT

Вуаля! Машина видна снаружи!

!!!БОЛЬШОЕ ПРЕДУПРЕЖДЕНИЕ!!!

Прежде чем «выкидывать» порт наружу — имеет смысл поставить на эту
машину 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(у нас же нет третьей сетевой карточки)
сетевого интерфейса(все команды — от рута, естественно)


# ifconfig $IFACE:0 $NEW_IP netmask $NM broadcast $BC
# route add $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0
# iptables -t nat -A PREROUTING -p tcp -d $NEW_IP -j DNAT --to-destination $LOCAL_IP
# iptables -A FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT

Ещё можно написать скрипт, который легко опускает/поднимает DNAT

# cat-/etc/rc.d/rc.dnat

#!/bin/bash
$IFACE=eth0
$LOCAL_IP=»192.168.1.251″
$NEW_IP=»q.w.e.r»
$NM=»a.s.d.f»
$BC=»z.x.c.v»
$GW=»p.o.i.u»

case «$1» in
‘stop’)
iptables -D FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT
iptables -t nat -D PREROUTING -p tcp -d $NEW_IP -j DNAT —to-destination $LOCAL_IP
route del $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0
ifconfig $IFACE:0 down
;;
‘start’)
ifconfig $IFACE:0 $NEW_IP netmask $NM broadcast $BC
route add $NEW_IP gw $GW netmask 0.0.0.0 metric 1 dev $IFACE:0
iptables -t nat -A PREROUTING -p tcp -d $NEW_IP -j DNAT —to-destination $LOCAL_IP
iptables -A FORWARD -i eth0 -d $LOCAL_IP -j ACCEPT
;;
‘restart’)
$0 stop && $0 start
;;
*)
echo «usage $0 start|stop|restart»
;;
esac

Источник


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2019

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!