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

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

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

То есть мы меняем net.ipv4.ip_forward = 0 на net.ipv4.ip_forward = 1.


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

Поднятие маскарада для внутренней сетки (ип внутрисетевой динамический и идёт по дхцп от корбины!). Маскарад по сути это тот же нат, но используется тут именно он, тк это правило по мимо самого ната определяет ещё и айпишник. У нас айпи может меняться и поэтому применять чистый нат было бы глупо, хотя он по идее и должен пахать быстрее, тк 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
  1. #!/bin/bash
  2.  
  3.  
  4.  
  5. #Vars init
  6. CorbLAN=enp5s2                          #eth0
  7. CorbVPN=ppp0                            #ppp0
  8. CorbVPNaddr=78.107.250.18       #static external IP addr
  9. LAN=enp2s0                                      #eth1
  10.  
  11.  
  12. ######
  13. ## Interne Connection sharing (SNAT and MASQUERADE)
  14. ######
  15.  
  16. ## Corbina LAN gives us dynamic LAN addr => use MASQUERADE
  17. iptables -t nat -A POSTROUTING -o $CorbLAN -j MASQUERADE
  18.  
  19. ## Corbina Internet gives us Static IP addr => use SNAT
  20. iptables -t nat -A POSTROUTING -o $CorbVPN -j SNAT --to-source $CorbVPNaddr
  21.  
  22. ## Solving problem of different MTU between LAN and CorbVPN (1500 vs 1456)
  23. iptables -A FORWARD -o $CorbVPN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  24.  
  25.  
  26. ######
  27. ## Some rules that I'm not sure about at all
  28. ######
  29.  
  30.  
  31. # iptables -A FORWARD -i enp5s2 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  32. # iptables -A FORWARD -i enp2s0 -o enp5s2 -j ACCEPT
  33.  
  34. # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  35. # iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
  36. # iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
  37. # iptables -A INPUT -p icmp -j ACCEPT
  38. # iptables -A INPUT -i eth1 -j ACCEPT
  39. # iptables -A INPUT -i lo -j ACCEPT
  40.  
  41. # iptables -A FORWARD -i ppp0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
  42. # iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
  43.  
  44. # iptables -A FORWARD -i eth0 -o eth0 -j REJECT --reject-with icmp-port-unreachable
  45. # iptables -A FORWARD -i eth0 -o ppp0 -j REJECT --reject-with icmp-port-unreachable
  46. # iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT --reject-with icmp-port-unreachable
  47. # iptables -A FORWARD -i ppp0 -o eth0 -j REJECT --reject-with icmp-port-unreachable
  48.  
  49.  
  50. /etc/init.d/iptables save
  51. sleep 1
  52. /etc/init.d/iptables restart


File: iptables_del.sh
  1. #!/bin/bash
  2.  
  3.  
  4. #Vars init
  5. CorbLAN=enp5s2                          #eth0
  6. CorbVPN=ppp0                            #ppp0
  7. CorbVPNaddr=78.107.250.18       #static external IP addr
  8. LAN=enp2s0                                      #eth1
  9.  
  10.  
  11. ######
  12. ## Interne Connection sharing (SNAT and MASQUERADE)
  13. ######
  14.  
  15. ## Corbina LAN gives us dynamic LAN addr => use MASQUERADE
  16. iptables -t nat -D POSTROUTING -o $CorbLAN -j MASQUERADE
  17.  
  18. ## Corbina Internet gives us Static IP addr => use SNAT
  19. iptables -t nat -D POSTROUTING -o $CorbVPN -j SNAT --to-source $CorbVPNaddr
  20.  
  21. ## Solving problem of different MTU between LAN and CorbVPN (1500 vs 1456)
  22. iptables -D FORWARD -o $CorbVPN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  23.  
  24.  
  25. ######
  26. ## Some rules that I'm not sure about at all
  27. ######
  28.  
  29.  
  30. # iptables -D FORWARD -i $CorbLAN -o $LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
  31. # iptables -D FORWARD -i $LAN -o $CorbLAN -j ACCEPT
  32.  
  33.  
  34. /etc/init.d/iptables save
  35. sleep 1
  36. /etc/init.d/iptables.restart