Настройка роутера (Интернет-шлюза) на ОС Ubuntu Server 13.10 с помощью iptables + NAT + dhcpd | OS CONFIG

Настройка роутера (Интернет-шлюза) на ОС Ubuntu Server 13.10 с помощью iptables + NAT + dhcpd

На машине имеем 2 сетевых интерфейса:

Внешняя сеть (eth1) — 192.168.0.0/24

Внутренняя сеть (eth0) — 192.168.21.0/24 (сделаем так)

Шлюз во внешней сети — маршрутизатор с IP адресом 192.168.0.1

Согласно поставленной задачи настроим доступ в Интернет во внутренней сети средствами данной операционной системы, пробросим несколько портов во внутреннюю сеть, а также настроим DHCP-сервер для раздачи IP-адресов во внутреннюю сеть.



Настраиваем сетевые интерфейсы. Открываем файл /etc/network/interfaces

sudo nano /etc/network/interfaces

и вписываем такие строчки:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The internal network interface

auto eth0

iface eth0 inet static

address 192.168.21.1

netmask 255.255.255.0

network 192.168.21.0

broadcast 192.168.21.255

 

# The external network interface

auto eth1

iface eth1 inet static

address 192.168.0.121

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.0.255

gateway 192.168.0.1

dns-nameservers 192.168.0.1

В это файле Internal network interface — это сетевой интерфейс, который смотрит во внутреннюю сеть, а External network interface — во внешнюю (соответственно).

Сохраняем и перезапускаем сетевые интерфейсы

sudo service networking restart

После этого обновляем систему.

sudo apt-get upgrade -y

Затем создаём папку /etc/firewall, и в ней скрипт /etc/firewall/iptables.sh

sudo mkdir /etc/firewall

sudo touch /etc/firewall/iptables.sh

открываем его

sudo nano /etc/firewall/iptables.sh

и впишем такие строчки:

#!/bin/sh

iptables -F

iptables -t nat -F

sysctl -w net.ipv4.ip_forward=″1″

iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 5432 -j DNAT —to-destination 192.168.21.10:5432

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 80 -j DNAT —to-destination 192.168.21.10:80

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 443 -j DNAT —to-destination 192.168.21.10:443

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 3306 -j DNAT —to-destination 192.168.21.11:3306

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 21 -j DNAT —to-destination 192.168.21.12:21

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 8443 -j DNAT —to-destination 192.168.21.13:8443

iptables -t filter -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A INPUT -i eth+ -j ACCEPT

iptables -t filter -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT

iptables -t filter -A FORWARD -m state —state ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A FORWARD -p icmp -j ACCEPT

iptables -t filter -A FORWARD -i lo -j ACCEPT

iptables -t filter -A FORWARD -i eth+ -j ACCEPT

iptables -t filter -A FORWARD -o eth+ -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.10 —dport 5432 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.10 —dport 80 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.10 —dport 433 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.11 —dport 3306 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.12 —dport 21 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -m state —state NEW -m tcp -d 192.168.21.13 —dport 8443 -j ACCEPT

iptables -t filter -A INPUT -j REJECT —reject-with icmp-host-prohibited

iptables -t filter -A FORWARD -j REJECT —reject-with icmp-host-prohibited

iptables-save > /etc/network/iptables

В этом файле описан проброс портов на следующие IP-адреса машин в локальной сети:

  • порты 5432 (БД PostgreSQL), 80 (HTTP) и 433 (HTTPS) — на 192.168.21.10 по протоколу TCP
  • порт 3306 (БД MySQL) — на 192.168.21.11 по протоколу TCP
  • порт 21 (FTP) — на 192.168.21.12 по протоколу TCP
  • порт 8443 (HTTPS) — на 192.168.21.13 по протоколу TCP

Даём этому файлу права на запуск:

sudo chmod +x /etc/firewall/iptables.sh

Создаём файл /etc/network/iptables

sudo touch /etc/network/iptables

Теперь открываем файл /etc/rc.local

sudo nano /etc/rc.local

и в нём перед строчкой

exit 0;

добавляем строчку

/etc/firewall/iptables.sh

Устанавливаем DHCP сервер:

sudo apt-get install isc-dhcp-server

Делаем бэкап файла dhcpd.conf:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

После этого открываем его

sudo nano /etc/dhcp/dhcpd.conf

стираем все строчки, которые там видим, и пропишем там такие строчки:

default-lease-time 600;

max-lease-time 7200;

authoritative;

log-facility local7;

subnet 192.168.21.0 netmask 255.255.255.0 {

range 192.168.21.21 192.168.21.151;

option routers 192.168.21.1;

option domain-name-servers 8.8.8.8,8.8.4.4;

}

сохраняем и закрываем файл.

Здесь указано, что диапазон IP-адресов для раздачи по сети — с 192.168.21.21 по 192.168.21.151,а DNS-сервера — 8.8.8.8 и 8.8.4.4.

После этого перезагрузим систему:

sudo shutdown -r now

Проверяем. Открываем файл /etc/network/iptables. Он должен принять такой вид:

US iptables iptables-save

Машины в локальной сети должны получать IP-адреса автоматически (с 192.168.21.21 по 192.168.21.151), а машины со статическими IP-адресами в соответствии с файлом /etc/network/iptables должны быть доступны по проброшенным портам во внешней сети.

Готово! Удачного использования ;-).

Готово, машина настроена. Удачного использования ;-).


Если Вам помогла статья, вы можете отблагодарить автора:
перечислить на WMR кошелёк (WebMoney): R301575071888
перечислить на Яндекс.Кошелёк: 410011003938168
или на PayPal:

Вы можете оставить комментарий, или ссылку на Ваш сайт.
  • beknur

    а если /etc/network/iptables пустой, это что означает?

    • OSC_Evgeny

      значит правила не применились.

      проверьте:

      наличие строки iptables-save /etc/network/iptables в файле /etc/firewall/iptables.sh

      наличие строки /etc/filewall/iptables.sh в файле /etc/rc.local

  • Nasyr

    я все сделал точно так же как здесь написано. Но /etc/network/iptables пустой.
    хотя iptables работает.

    • OSC_Evgeny

      Дико извиняюсь… в скрипте последняя строчка должна быть

      iptables-save > /etc/network/iptables

      забыл символ «>» поставить…

      • nasyr

        спасибо друг. все замечательно работает.

        • OSC_Evgeny

          не за что 🙂

  • Labor

    Доброго времени суток!

    Подскажите «чайнику», какие строки отвечают за раздачу интернета в локальную сеть. Т.е. хочется его, интернет, туда, в локальную сеть, не давать.

    • OSC_Evgeny

      чтоб не давать интернет в локальную сеть, вам достаточно в настройках /etc/dhcp/dhcpd.conf закомментировать строчки option routers и option domain-name-servers. а тем машинам, которым необходимо выходить в интернет, необходимо прописать настройки сети вручную (со шлюзом и dns-серверами).

  • Maxim

    Спасибо большое, отличная статья.
    ИМХО вместо eth+ в правилах iptables должно быть eth1.
    Кроме того строка sysctl -w net.ipv4.ip_forward=″1″ к сожалению работает только до перезагрузки сервера, надежнее просто раскомментировать ее в /etc/sysctl.conf

  • Нашел много статей на эту тему, но того что нужно не нашел. А нужно развернуть шлюз во внешнюю сеть без dhcp-сервера и с vpn-сервером, дабы к нему могли подключаться другие подобные шлюзы. Это необходимо для связи офисов между собой, чтобы они видели внутренние ресурсы между собой, а в Интернеты ходили только через свои шлюзы. Подскажите пожалуйста, как такое организовать?

    • OSC_Evgeny

      думаю, OpenVPN + шлюз как я описывал, только без DHCP-сервера. про OpenVPN позже опишу. сейчас просто времени пока нет…

      • Я настраивал VPN на базе pptpd — http://jtprog.ru/simple-vpn/
        От OpenVPN отказались, если мне память не изменяет, по причине того, что он как-то не очень работал то ли с виндовыми клиентами, то ли с яблочными (в основном iPhone).

  • Влад Татаринцев

    А как на счёт шейпера?



Яндекс.Метрика
Проверка ТИЦ Яндекс цитирования