Debian iptables настройка роутера

Пошаговая настройка роутера на Debian

Ранее я уже рассматривал настройку программных роутеров на операционных системах freebsd и centos. Сегодня я хочу настроить интернет шлюз для локальной сети на основе популярного linux дистрибутива Debian. Выполним подготовку сервера и реализуем основной функционал, необходимый для выхода в интернет из локальной сети.

Введение

Я буду работать со следующим сервером:

# uname -a 
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux
# cat /etc/debian_version
8.3

Если у вас еще нет готового сервера, то рекомендую статью на тему установки debian. Там подробно описан весь процесс от и до.

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

Описание сетевых интерфейсов

Интерфейс Описание IP
eth0 внешний интерфейс, подключен к провайдеру, настройки получает по dhcp автоматически 192.168.1.24
eth1 внутренний интерфейс, смотрит в локальную сеть, статический ip адрес 10.0.15.1

Файл конфигурации сетевых интерфейсов выглядит следующим образом:

# cat /etc/network/interfaces 
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet static
address 10.0.15.1
netmask 255.255.255.0

Как настроить сеть в debian я подробно рассказал отдельно. Если вы еще не сделали это и не выполнили предварительную настройку debian, то рекомендую ознакомиться с материалами.

Если у вас недостаточно опыта и вы не чувствуете в себе сил разобраться с настройкой шлюза самому с помощью консоли сервера — попробуйте дистрибутив на основе centos для организации шлюза и прокси сервера в локальной сети — clearos. С его помощью можно через браузер настроить весь необходимый функционал. В отдельной статье я подробно рассказал об установке clearos.

Подготовка шлюза

Выше я привел ссылку на подробную статью с описанием настройки сервера общего назначения. Сейчас мы выполним некоторые подготовительные действия без подробностей и описания. Их вы можете почитать отдельно. Сейчас просто необходимые команды.

Сеть на будущем программном роутере настроили, доступ в интернет на сервере есть. Обновим его:

# apt-get update 
# apt-get upgrade

Установим MC, мне в нем удобнее всего работать, в том числе в редакторе mcedit:

Настроим часовой пояс, если раньше не сделали это:

Устанавливаем сервис ntp для автоматического обновления времени:

На этом основные подготовительные действия закончены. Приступаем к настройке шлюза.

Настройка маршрутизации, firewall и nat

Пошаговая настройка роутера на Debian

Первым делом включим маршрутизацию пакетов между сетевыми интерфейсами. Для этого редактируем конфиг /etc/sysctl.conf:

# mcedit /etc/sysctl.conf 
net.ipv4.ip_forward=1

Либо раскомментируйте эту строку, либо добавьте, если ее нет. Но она по-умолчанию быть должна, закомментированная со значением 1. Применяем эту настройку:

На выходе работы команды в консоли будет выведен измененный параметр со значением 1.

Читайте также:  Сколько должна быть скорость роутера

Теперь приступаем к самому главному — настройке фаервола iptables и nat в нем для обеспечения выхода в интернет из локальной сети. Я очень подробно рассмотрел эту тему в отдельной статье. Хотя там речь идет о другом дистрибутиве, сами правила iptables абсолютно одинаковые с точностью до строчки, за исключением маленького нюанса, связанного с тем, что правила нужно сохранять в другой файл для применения их после перезагрузки.

Я приведу здесь сразу готовый вариант файла с правилами iptables, необходимых для работы интернет шлюза в debian. В файле даны подробные комментарии ко всем значениям, так что вы без проблем разберетесь и закомментируете или наоборот раскомментируете необходимые вам значения. Качаем скрипт правил iptables — iptables-debian.sh

Копируем содержимое файла и создаем скрипт с правилами на сервере:

Вставляем в редактор правила. Редактируем их под свои нужды, обязательно заменяя переменные WAN и LAN на свои. Сохраняем файл.

Прежде чем двигаться дальше предупреждаю, что все работы по настройке фаервола должны производиться только если у вас есть доступ к консоли сервера, чтобы в случае ошибки и потери удаленного доступа вы смогли откатить изменения. Даже если вы абсолютно уверены в своих знаниях, вас может подвести банальная ошибка или опечатка. Я сам, к сожалению, сталкивался с такими ситуациями, поэтому считаю необходимым предупредить об этом вас.

Делаем файл с правилами исполняемым:

Прежде чем применить новые правила, посмотрим на текущие:

список правил iptables в debian

Видим, что на настраиваемом роутере firewall полностью открыт. Теперь применим новые правила и посмотрим на результат:

применение новых правил iptables на шлюзе

Все в порядке, правила применились, доступ к серверу я не потерял. Теперь сделаем так, чтобы новые правила применялись после перезагрузки. В последней строчке скрипта есть команда:

/sbin/iptables-save > /etc/iptables.rules

С ее помощью готовый набор правил iptables выгружаются в файл. Нам нужно сделать так, чтобы эти правила применялись при включении сетевого интерфейса во время загрузки сервера. Для этого открываем файл interfaces на редактирование и добавляем в самый конец строчку:

# mcedit /etc/network/interfaces 
post-up iptables-restore < /etc/iptables.rules

Для проверки перезагружаем шлюз и проверяем, все ли в порядке. По сути основная настройка программного роутера на debian завершена. Осталось сделать небольшое дополнение и настроить dhcp и dns сервер в локальной сети. Я для этих целей использую простой и легкий в настройке dnsmasq.

Установка и настройка dnsmasq в Debian

Выполним установку dnsmasq на дебиан:

Сделаем минимальную настройку программы. Нам нужно просто выдавать сетевые настройки пользователям. Для этого приводим конфигурационный файл dnsmasq к следующему виду:

# mcedit /etc/dnsmasq.conf 
domain-needed
bogus-priv
interface=eth1
dhcp-range=eth1,10.0.15.50,10.0.15.150,24h

В данном случае мы будем выдавать пользователям ip адреса в диапазоне от 10.0.15.50 до 150. Сохраняем конфиг, добавляем программу в автозагрузку и запускаем.

# insserv dnsmasq 
# /etc/init.d/dnsmasq start

Теперь можно запускать компьютер пользователя локальной сети, получать сетевые настройки по dhcp и проверять работу интернет шлюза.

получение сетевых настроек по dhcp

Посмотреть выданные leases можно в файле /var/lib/misc/dnsmasq.leases. На этом настройка интернет шлюза на debian 8 закончена. Все что нужно для обеспечения доступа в интернет из локальной сети сделано. Получился программный роутер с широкими возможностями по наращиванию функционала.

Читайте также:  Объясните как настроить роутер

Просмотр загрузки сети с помощью iftop

Теперь представим ситуацию, что кто-то забил весь интернет канал и вам надо быстро выяснить, кто это сделал. По-умолчанию, никаких подручных и удобных средств на шлюзе для этого нету. Установим одно из таких средств — программу iftop. Это простая консольная утилита, которая дает возможность оперативно посмотреть статистику загруженности сетевого интерфейса в реальном времени.

Устанавливаем iftop на debian:

Для просмотра активности сетевого интерфейса, запускаем утилиту, указывая необходимый ключ:

Чтобы увидеть порты, по которым идет трафик, добавляем ключ -P:

анализ сетевой активности на сервере

На основе этой картинки уже можно сделать определенные выводы по использованию интернет канала. Обращаю внимание, что я смотрю загрузку локального интерфейса eth1. Если смотреть на eth0, то мы увидим только исходящие соединения сервера.

Заключение

Вот так легко и быстро можно настроить роутер, маршрутизатор или шлюз в интернет. Названия разные, а суть одна. В данном случае я использовал операционную систему Debian, но схожий функционал легко организовать на Freebsd или CentOS. Для решения текущей задачи разница в работе не будет заметна. Каждый выбирает то, что больше нравится и к чему привык.

Пройдемся быстренько по этапам того, что сделали:

  1. Подготовили сервер Debian к настройке шлюза.
  2. Настроили маршрутизацию, iptables, нат. Проверили, что весь функционал восстанавливается после перезагрузки.
  3. Установили и настроили простой dhcp сервер и кэширующий dns сервер — dnsmasq. С его помощью автоматизировали поучение сетевых настроек пользователями.
  4. Установили простое средство мониторинга сетевой активности в консоли в режиме реального времени с помощью утилиты iftop.

На этом мы закончили настройку. Как продолжение развития темы интернет шлюза можно заняться настройкой прокси сервера для управления доступам к ресурсам интернета, или сервера openvpn для подключения филиалов или удаленных сотрудников. Для примера привел ссылки на другие дистрибутивы. Со временем планирую описать реализацию этого функционала на debian. Принципиальных отличий нет, только нюансы разных дистрибутивов.

  • Базовая настройка сервера Debian после установки
  • Установка и настройка vsftpd на CentOS 7
  • Как установить или обновить php 7 на CentOS 7
  • Backup linux сервера с помощью Duplicity
  • Установка Ruby на CentOS 7
  • Установка и настройка удаленного доступа на CentOS 7 с помощью Webmin
  • Установка phpmyadmin на CentOS 7
  • Как настроить сетевые параметры в Debian
  • Настройка почтового сервера iRedMail на CentOS 7
  • Настройка pptp сервера на Debian

Вам также может понравиться

Движение — жизнь. Привыкаем с детства жить на ногах, а не попе.

Движение — жизнь. Привыкаем с детства жить на ногах, а не попе.

Установка и настройка lxc контейнеров на Centos 7

Источник

Роутер и проброс портов на Debian 10.9

Подробная инструкция по настройке роутера в связке iptables + dnsmasq на Debian GNU/Linux, а также проброс портов по IP-адресам машин в локальной сети.

Исходные данные

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

enp0s3 — для внешней сети 192.168.1.0/24

Читайте также:  Cisco packet tracer перезагрузка маршрутизатора

enp0s8 — для внутренней сети 192.168.52.0/24

Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1

Наша задача — настроить доступ в Интернет для внутренней сети.

Открываем файл /etc/sysctl.conf

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

Теперь создадим правила iptables. Для этого создадим каталог /etc/firewall/ и файл /etc/firewall/iptables.sh

# mkdir /etc/firewall/ # touch /etc/firewall/iptables.sh
# nano /etc/firewall/iptables.sh

и в нём пропишем такой скрипт:

#!/bin/sh iptables -F iptables -t nat -A POSTROUTING -o enp0s+ -j MASQUERADE 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 enp0s+ -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 enp0s+ -j ACCEPT iptables -t filter -A FORWARD -o enp0s+ -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
# chmod u+x /etc/firewall/iptables.sh

Теперь откроем файл /etc/network/interfaces

# nano /etc/network/interfaces

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

Также создадим файл /etc/network/iptables

Теперь вернёмся к файлу /etc/firewall/iptables.sh — запускаем скрипт

Правила файрволла активируются и пропишутся в /etc/network/iptables. В дальнейшем, при перезагрузке системы, система будет тянуть правила из него.

После установки система сама запустит службу dnsmasq и добавит её в автозагрузку. Это можно проверить командой:

Loaded: loaded Active: active (running)

После этого открываем файл /etc/dnsmasq.conf

и в нём пропишем такой конфиг:

domain-needed bogus-priv interface=enp0s8 resolv-file=/etc/resolv.conf dhcp-range=192.168.52.131,192.168.52.180,24h cache-size=150

Перезапускаем службу dnsmasq

# systemctl restart dnsmasq

или лучше вообще перезагрузить машину

Теперь роутер должен работать и машины в сети получать ip-адреса и dns.

При необходимости в пробросе портов по IP-адресам для доступа из внешней сети нужно снова открыть скрипт /etc/firewall/iptables.sh

# nano /etc/firewall/iptables.sh
iptables -t nat -A POSTROUTING -o enp0s+ -j MASQUERADE
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.52.111:1234 iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 5678 -j DNAT --to-destination 192.168.52.112:5678
iptables -t filter -A INPUT -i enp0s+ -j ACCEPT
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT iptables -t filter -A INPUT -p tcp -m state --state NEW -m udp --dport 5678 -j ACCEPT
  • 1234 и 5678 — номера портов
  • tcp и udp — протоколы
  • 192.168.52.111 и 192.168.52.112 — ip-адреса машин в локальной (внутренней) сети

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

чтобы изменения вступили в силу.

Новые правила заново перечитаются и запишутся в файл /etc/network/iptables, а уже из этого файла при перезагрузке сервера будут автоматически запускаться эти правила.

Похожие посты:

Источник

Оцените статью
Adblock
detector