NAT and MASQUERADE using IpTables on dedicated home server powered by Gentoo linux

Материал из AlexNook
Перейти к навигацииПерейти к поиску

заметка посвящена настройке netFilter/iptables для поднятия NAT на выделенном домашнем сервере.

Настройка ядра Gentoo для работы с iptables

Заполнить..

Предварительные настройки в OS

Сперва надо сказать системе, что вы хотите использовать форвардинг пакетов. По умолчанию эта функция отключена. Без её включения внесение правил в ipTables не даст нужного результата.

echo 1 > /proc/sys/net/ipv4/ip_forward
Warning: Файл /etc/sysctl.conf сейчас устарел. Нужно использовать папку /etc/sysctl.d/ где следует создавать любое количество файлов с расширением .conf в которых можно задавать параметры настройки которые будут парсится sysctl(8)

Теперь, чтобы после перезагрузки система автоматом выполняла шаг, который мы проделали выше, нужно зайти в папку /etc/sysctl.d/ и добавить туда файлик net_ipv4_forward.conf:

File: /etc/sysctl.d/net_ipv4_forward.conf
net.ipv4.ip_forward = 1

Если нужно отменить форвардинг,то поменять строчку net.ipv4.ip_forward = 1 на net.ipv4.ip_forward = 0.


Заносим правила в сетевой экран

Поднятие маскарада для внутренней сетки (ип внутрисетевой динамический и идёт по дхцп от корбины!). Маскарад по сути это тот же нат, но используется тут именно он, тк это правило по мимо самого ната определяет ещё и айпишник. У нас айпи может меняться и поэтому применять чистый нат было бы глупо, хотя он по идее и должен пахать быстрее, тк IP там жёстко прописан.

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

Поднятие того же маскарада (ната), но с использованием статического ната, тк IP внешний постоянный и использовать тут уже тот же банальный маскарад нет смысла из соображений производительности.

iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 78.107.250.18

Создаём скрипт добавления правил в IpTables

Для удобства можно указанные правила добавить в bash скрипт, чтобы можно было быстро и удобно вносить правки сразу во все настройки netfilter.

File: iptables_add.sh
#!/bin/bash



#Vars init
CorbLAN=enp5s2                          #eth0
CorbVPN=ppp0                            #ppp0
CorbVPNaddr=78.107.250.18       #static external IP addr
LAN=enp2s0                                      #eth1


######
## Interne Connection sharing (SNAT and MASQUERADE)
######

## Corbina LAN gives us dynamic LAN addr => use MASQUERADE
iptables -t nat -A POSTROUTING -o $CorbLAN -j MASQUERADE

## Corbina Internet gives us Static IP addr => use SNAT
iptables -t nat -A POSTROUTING -o $CorbVPN -j SNAT --to-source $CorbVPNaddr

## Solving problem of different MTU between LAN and CorbVPN (1500 vs 1456)
iptables -A FORWARD -o $CorbVPN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


######
## Some rules that I'm not sure about at all
######


# iptables -A FORWARD -i enp5s2 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i enp2s0 -o enp5s2 -j ACCEPT

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
# iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -A INPUT -i eth1 -j ACCEPT
# iptables -A INPUT -i lo -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 -A FORWARD -i eth0 -o eth0 -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -i eth0 -o ppp0 -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -i ppp0 -o eth0 -j REJECT --reject-with icmp-port-unreachable


/etc/init.d/iptables save
sleep 1
/etc/init.d/iptables restart


File: iptables_del.sh
#!/bin/bash


#Vars init
CorbLAN=enp5s2                          #eth0
CorbVPN=ppp0                            #ppp0
CorbVPNaddr=78.107.250.18       #static external IP addr
LAN=enp2s0                                      #eth1


######
## Interne Connection sharing (SNAT and MASQUERADE)
######

## Corbina LAN gives us dynamic LAN addr => use MASQUERADE
iptables -t nat -D POSTROUTING -o $CorbLAN -j MASQUERADE

## Corbina Internet gives us Static IP addr => use SNAT
iptables -t nat -D POSTROUTING -o $CorbVPN -j SNAT --to-source $CorbVPNaddr

## Solving problem of different MTU between LAN and CorbVPN (1500 vs 1456)
iptables -D FORWARD -o $CorbVPN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


######
## Some rules that I'm not sure about at all
######


# iptables -D FORWARD -i $CorbLAN -o $LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -D FORWARD -i $LAN -o $CorbLAN -j ACCEPT


/etc/init.d/iptables save
sleep 1
/etc/init.d/iptables.restart