Iptables NAT — проброс порта во внутреннюю сеть

Если есть необходимость предоставить доступ из интернета к компьютеру, расположенному внутри сети с Linux маршрутизатором, это можно легко сделать с помощью правил iptables.

С помощью iptables вы можете как выставить наружу определенный порт, так и полностью переадресовать весь внешний трафик к нужному компьютеру.

Проброс одного порта внутрь сети

На маршрутизаторе нужно выполнить следующие команды

sudo iptables -t nat -A PREROUTING -p tcp -d <EXT_IP> —dport <EXT_PORT> -j DNAT —to-destination <LOCAL_IP>:<LOCAL_PORT>
sudo iptables -A FORWARD -i eth0 -d <LOCAL_IP> -p tcp —dport <LOCAL_PORT> -j ACCEPT

После этого при обращении из интернет к внешнему адресу <EXT_IP> и порту <EXT_PORT> вы будете видеть сервис, работающий на компьютере с адресом <LOCAL_IP> и порту <LOCAL_PORT>

Полная переадресация трафика с внешнего IP

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 &amp;&amp; $0 start
;;
*)
echo «usage $0 start|stop|restart»
;;
esac

—end-of-cat—

 

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

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