Проброс порта внутрь сети через 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

Источник


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

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

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

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

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