NAT and MASQUERADE using IpTables on dedicated home server powered by Gentoo linux: различия между версиями
ALEX (обсуждение | вклад) |
ALEX (обсуждение | вклад) |
||
Строка 30: | Строка 30: | ||
{{root|iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 78.107.250.18}} | {{root|iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 78.107.250.18}} | ||
==Создаём скрипт добавления правил в IpTables== | |||
Для удобства можно указанные правила добавить в bash скрипт, чтобы можно было быстро и удобно вносить правки сразу во все настройки netfilter. | |||
{{file|iptables_add.sh| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
#!/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 | |||
</syntaxhighlight> | |||
}} | |||
{{file|iptables_del.sh| | |||
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
#!/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 | |||
</syntaxhighlight> | |||
}} | |||
[[Category:Index]] | [[Category:Index]] | ||
[[Category:Linux]] | [[Category:Linux]] |
Версия 13:01, 1 января 2017
заметка посвящена настройке netFilter/iptables для поднятия NAT на выделенном домашнем сервере.
Настройка ядра Gentoo для работы с iptables
Заполнить..
Предварительные настройки в OS
Сперва надо сказать системе, что вы хотите использовать форвардинг пакетов. По умолчанию эта функция отключена. Без её включения внесение правил в ipTables не даст нужного результата.
Теперь, чтобы после перезагрузки система автоматом выполняла шаг, который мы проделали выше, нужно в файле /etc/sysctl.conf произвести следующие изменения:
net.ipv4.ip_forward = 1
То есть мы меняем net.ipv4.ip_forward = 0 на net.ipv4.ip_forward = 1.
Заносим правила в сетевой экран
Поднятие маскарада для внутренней сетки (ип внутрисетевой динамический и идёт по дхцп от корбины!). Маскарад по сути это тот же нат, но используется тут именно он, тк это правило по мимо самого ната определяет ещё и айпишник. У нас айпи может меняться и поэтому применять чистый нат было бы глупо, хотя он по идее и должен пахать быстрее, тк IP там жёстко прописан.
Поднятие того же маскарада (ната), но с использованием статического ната, тк IP внешний постоянный и использовать тут уже тот же банальный маскарад нет смысла из соображений производительности.
Создаём скрипт добавления правил в IpTables
Для удобства можно указанные правила добавить в bash скрипт, чтобы можно было быстро и удобно вносить правки сразу во все настройки netfilter.
#!/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
#!/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