четверг, 7 мая 2015 г.

Linux router NAT and port forward


1) Включить форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

2) В файл  /etc/sysctl.conf  добавляем  строку:

net.ipv4.ip_forward = 1

3) Включить НАТ (ppp0) внешний интерфейс

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

4) Обычная схема

iptables -t nat -A POSTROUTING -o eth0  -j MASQUERADE

----------------------------------------------------------------------------------------------------------
Усложненный скрипт:


#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin

#
# Чистим предыдущие правила
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Принимаем лупбэк
iptables -A INPUT -i lo -j ACCEPT


# Разрешаем запросы изнутри, но не снаружи 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем весь иходящий траф
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT


# Непосредственно включение ната
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Запрещаем траф снаружи внутрь
iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT
iptables -A FORWARD -i eth0 -o ppp0 -j REJECT
# Активация роутинга
echo 1 > /proc/sys/net/ipv4/ip_forward

-------------------------------------------------

"проброс" порта за роутер
iptables -t nat -A PREROUTING -d 12.34.56.78 -p tcp --destination-port 80 -j DNAT --to-destination 192.168.0.3