Настройка nat через iptables masquerade на debian (ubuntu)

Настройка простого nat

Для начала, хотелось бы рассказать, как организуется простой nat по средствам iptables masquerade (маскарадинга). Во всех linux подобных дистрибутивах, самый простой и удобный способ настроить nat, — это прописать пару строчек в iptables и включить форвардинг пакетов в настройках системы.
Для debian и ubuntu это делается следующим образом: создадим файл /etc/firewall

>/etc/firewall

Дадим ему права на выполнение

chmod +x /etc/firewall

И пропишем настройки nat и forwarding этот файл

mcedit /etc/firewall

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward # включаем форвардинг

FW=/sbin/iptables # создадим переменную FW, чтобы каждый раз не писать /sbin/iptables

# Очищаем все правила, цепочки и таблицу nat
$FW -F
$FW -F -t nat
$FW -X

# Присвоим переменную сети, которую будем натить
NET="10.10.10.0/29"

# Разрешим ей подключаться к шлюзу (не обязательно для nat)
$FW -A INPUT -s $NET -j ACCEPT

# Включаем nat по средствам iptables masquerade
$FW -A FORWARD -s 0/0 -d $NET -j ACCEPT
$FW -A FORWARD -d 0/0 -s $NET -j ACCEPT
$FW -t nat -A POSTROUTING -s $NET -j MASQUERADE

Настройка нашего шлюза (iptables nat + балансировка iproute2)

Мы уже настроили все наши сети и VLAN в предыдущих статьях, теперь необходимо настроить скрипт с правилами iptables для nat с балансировкой нагрузки.

Прежде всего, создадим файл /etc/firewall и дадим ему права на исполнение
/etc/firewall
chmod +x /etc/firewall

Теперь впишем в него правила
#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward # включаем форвардинг

FW=/sbin/iptables # создам переменную FW

# Очищаем все правила, цепочки и таблицу nat
$FW -F
$FW -F -t nat
$FW -X

# Создадим переменные для сетей и интерфейсов
P1="10.10.10.1"
P2="10.10.11.2" #
VLAN100="192.168.10.1" # IT
VLAN101="192.168.10.65" # Buh
VLAN102="192.168.10.129" # Komotdel
VLAN103="192.168.10.193" # Top management

# NETs
NET100="192.168.10.0/26"
NET101="192.168.10.64/26"
NET102="192.168.10.128/26"
NET103="192.168.10.192/26"

# Добавим интервалы пинга, чтобы нас не спамили мелкими пакетами
# ICMP limit
$FW -A INPUT -p icmp --icmp-type 8 -m limit --limit 3/s --limit-burst 10 -j ACCEPT
$FW -A INPUT -p icmp --icmp-type 11 -m limit --limit 3/s --limit-burst 10 -j ACCEPT

#Разрешим доступ для себя
$FW -A INPUT -s localhost -j ACCEPT

# Натим наши внутренние сети через оба интерфейса в интернет
#VLAN100
$FW -A FORWARD -s 0/0 -d $NET100 -j ACCEPT
$FW -A FORWARD -d 0/0 -s $NET100 -j ACCEPT
$FW -t nat -A POSTROUTING -s $NET100 -j MASQUERADE

#VLAN101
$FW -A FORWARD -s 0/0 -d $NET101 -j ACCEPT
$FW -A FORWARD -d 0/0 -s $NET101 -j ACCEPT
$FW -t nat -A POSTROUTING -s $NET101 -j MASQUERADE

#VLAN102
$FW -A FORWARD -s 0/0 -d $NET102 -j ACCEPT
$FW -A FORWARD -d 0/0 -s $NET102 -j ACCEPT
$FW -t nat -A POSTROUTING -s $NET102 -j MASQUERADE

#VLAN103
$FW -A FORWARD -s 0/0 -d $NET103 -j ACCEPT
$FW -A FORWARD -d 0/0 -s $NET103 -j ACCEPT
$FW -t nat -A POSTROUTING -s $NET100 -j MASQUERADE

# Разрешаем доступ по SSH
$FW -A INPUT -p tcp --dport 22 -j ACCEPT

# Закрывает все лишнее
$FW -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$FW -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT
$FW -P FORWARD DROP
$FW -P INPUT DROP

Сохраняем изменения в файле и выполняем его
/etc/firewall