Меню Рубрики

Centos 7 настройка роутера

Настройка Интернет шлюза на CentOS 7

Процесс настройки шлюза (NAT) на системах UNIX, обычно, выполняется в несколько команд: включением перенаправления на уровне системы и настройкой firewall.

Настройка системы

Все что нужно настроить — включить перенаправления на уровне ядра. Для этого открываем следующий файл:

И добавляем в него следующую строку:

После применяем настройку:

sysctl -p /etc/sysctl.conf

В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.

В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.

Настройка брандмауэра

Рассмотрим настройку фаервола при помощи двух различных популярных утилит — firewalld и iptables.

Firewalld

Настройка выполняется для двух сетевых интерфейсов — ens32 (внутренний) и ens34 (внешний):

firewall-cmd —direct —permanent —add-rule ipv4 nat POSTROUTING 0 -o ens34 -j MASQUERADE

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens34 -j ACCEPT

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens34 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT

systemctl restart firewalld

Iptables

Настройка выполняется из расчета, что внутренняя сеть имеет адресацию 192.168.0.0/24:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

systemctl restart iptables

Проброс портов (Port Forwarding)

Необходим для перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть. Настройки отличаются в зависимости от способа управления брандмауэром netfilter.

Firewalld

firewall-cmd —zone=external —permanent —add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15

* где 25 — прослушиваемый внешний порт, для которого сработает перенаправление; tcp — используемый транспортный протокол; 8025 — на какой порт перенаправить запрос; 192.168.0.15 — IP-адрес сервера, на который отправляем запросы.

Разрешаем сам порт:

firewall-cmd —permanent —zone=external —add-port=25/tcp

Чтобы правило вступило в силу:

Iptables

Настройка выполняется двумя командами:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 10.8.232.111 —dport 25 -j DNAT —to-destination 192.168.0.15:8025

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.0.15 —sport 8025 -j SNAT —to-source 10.8.232.111:25

iptables -t nat -A PREROUTING -p tcp -i eth0 —dport 25 -j DNAT —to-destination 192.168.0.15:8025

iptables -A FORWARD -p tcp -d 192.168.0.15 —dport 8025 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth0 — внешний сетевой интерфейс.

iptables -I INPUT 1 -p tcp —dport 8025 -j ACCEPT

* обратите внимание, что мы разрешаем порт, на который переводим запрос, так как цепочки POSTROUTING и PREROUTING работают до цепочки FILTER, а потому открывать нужно не входящий порт (25), а тот, на который назначается пакет (8025).

Источник

Настройка шлюза на CentOS 7

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

Данная статья является частью единого цикла статьей про сервер Debian.

Введение

В нашем распоряжении будет следующий сервер для настройки шлюза:

Использовался образ minimal для установки CentOS 7. Если вы еще не выполнили установку, рекомендую воспользоваться моим материалом на эту тему. На сервере две сетевые карты eth0 и eth1:

  • eth0 подключена к интернету
  • eth1 подключена к локальной сети вместе с компьютерами

В данной статье мы выполним необходимые предварительные настройки на сервере, включим nat, настроим firewall и установим средство мониторинга сетевой активности.

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

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

Любую настройку сервера я рекомендую начинать с обновления:

После этого я устанавливаю mc, так как привык к нему и постоянно пользуюсь:

Дальше отключаем selinux. Находим файл /etc/sysconfig/selinux и редактируем его:

Приводим строку с соответствующим параметром к следующему виду:

Чтобы применить изменения, перезагружаем сервер:

Более подробно о базовой настройке сервера CentOS 7 читайте отдельно. Мы же двигаемся дальше.

Теперь настроим сеть. Я очень подробно рассмотрел вопрос настройки сети в CentOS 7 в своем отдельном материале. Рекомендую с ним ознакомиться. Здесь же я кратко выполню необходимые команды, без пояснений.

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

Теперь включаем классическую службу сети в CentOS 7:

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

Перезапускаем службу сети:

Смотрим, что получилось:

Вы настраивайте сеть в зависимости от своих условий. Если внешний адаптер получает настройки не по dhcp, как у меня, а в статике, то не забудьте настроить шлюз по-умолчанию и dns сервер. Как это сделать написано в моей статье о сетевых параметрах, ссылку на которую я приводил выше.

Включаем маршрутизацию, firewall и nat

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

Чтобы заработала настройка, выполняем команду:

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

Устанавливаем службы iptables:

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

Помещаем отредактированный скрипт в /etc/iptables.sh и делаем его исполняемым:

Добавляем их в автозагрузку:

Выполняем скрипт с правилами:

Проверяем установленные правила:

Если у вас то же самое, значит вы все сделали правильно.

По сути наш шлюз уже готов и может обслуживать клиентов. Но не работает одна важна служба, без которой нормальной работы с интернетом не получится. Нам нужно настроить кэширущий dns сервер для клиентов локальной сети. Можно пойти по простому и очень простому пути. Простой путь это выполнить простейшую настройку dns сервера bind. Как это сделать у меня опять же подробно написано отдельно — настройка Bind 9 в CentOS 7. Рекомендую ознакомиться, там рассмотрены интересные нюансы настройки.

Очень простой путь это установить dnsmasq, который помимо dns сервера включает в себя еще и dhcp сервер, который нам может пригодиться.

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

С большой долей вероятности dnsmasq у вас уже установлен. Проверить это можно следующей командой:

Если вывод такой же, значит пакет уже стоит. Если нет, то устанавливаем dnsmasq командой:

Редактируем файл конфигурации /etc/dnsmasq.conf и приводим его к очень простому виду:

Либо перезапускаем, если он был у вас запущен:

Добавляем dnsmasq в автозагрузку:

Я редактировал конфиг, когда у меня уже был установлен и запущен dnsmasq. И он то ли завис, то ли просто затупил, но я не мог его перезагрузить или остановить с помощью systemctl. Пришлось перезагрузить сервер. После этого все нормально заработало. Клиент на windows получил сетевые настройки. Информация об этом появилась в логе /var/log/messages. Я проверил на клиенте интернет, все было в порядке, он работал.

На этом настройка завершена, шлюзом под CentOS 7 можно пользоваться.

Анализ сетевой активности на шлюзе в linux

В данной конфигурации шлюз может успешно функционировать. Но иногда хочется посмотреть, а что вообще на нем происходит. Например, кто-то занимает весь канал, интернет тормозит, а мы как слепые котята сидим и не видим ничего. Нужно какое-то средство для просмотра загрузки сети на шлюзе. И такое средство есть — программа iftop.

Она отсутствует в стандартном репозитории CentOS 7. Для ее установки необходимо подключить репозиторий epel:

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

Теперь мы можем смотреть загрузку сети на шлюзе в режиме реального времени. Чтобы увидеть сетевую активность, достаточно запустить iftop:

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

Теперь уже гораздо интереснее. Я еще добавил параметр -P, который отображает порты, по которым проходят соединения. Посмотрим, кто больше всех загружает канал интернета:

В моем случае это пользователь с ip 192.168.10.98, на котором я запустил проверку скорости интернета с серверов Яндекса.

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

Заключение

С помощью бесплатного дистрибутива Linux мы смогли за считанные минуты настроить шлюз для организации доступа в интернет компьютеров из локальной сети. У меня ушло минут 10 на настройку шлюза по этой инструкции. Если вы делаете это первый раз, то конечно у вас уйдет гораздо больше времени. Нужно будет разобраться в нюансах, к тому же я дал много ссылок на дополнительный материал.

Давайте разберемся в том, что мы сделали:

  1. Выполнили предварительную настройку сервера, подготовили его к работе.
  2. Включили маршрутизацию.
  3. Настроили firewall.
  4. Включили NAT.
  5. Установили и настроили dnsmasq для организации служб dns и dhcp.
  6. Проанализировали сетевую активность шлюза, узнали кто загружает канал интернета.

Это минимально необходимый функционал для организации работы шлюза на CentOS 7. Следующим этапом может быть настройка прокси сервера, шейпера траффика, настройка 2-х и более провайдеров и много другое. Что-то из этого я рассмотрю в своих будущих статьях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.

Онлайн курс по Linux

Помогла статья? Подписывайся на telegram канал автора

Автор Zerox

87 комментариев

Блин извиняюсь, все заработало, после того как дал доступ во внутреннюю сеть в фаерволе.

сами попробуйте настроить шлюз придерживаясь чисто своей статьи.

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

все сделал как в статье нифига не заработало

Что именно не заработало? Тут нет никакой магии. Просто настройка iptables, dhcp и dns.

Вообще у кого нибудь заработал шлюз настроенной по этой статье? Отпишитесь.

первая сетевая карта использует тот же днс и интернет на ней работает

Добрый день, сделал все как написано в статье, но в локалке интернета нету. Почему? Можете объяснить?

[root@masterweb sysconfig]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

[root@masterweb sysconfig]# ifconfig
ens33: flags=4163 mtu 1500
inet 192.168.1.170 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe52:9d87 prefixlen 64 scopeid 0x20
ether 00:0c:29:52:9d:87 txqueuelen 1000 (Ethernet)
RX packets 3805 bytes 391629 (382.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2649 bytes 1344969 (1.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens34: flags=4163 mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe52:9d91 prefixlen 64 scopeid 0x20
ether 00:0c:29:52:9d:91 txqueuelen 1000 (Ethernet)
RX packets 687 bytes 52943 (51.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23 bytes 1550 (1.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 base 0x2000

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 26 bytes 1798 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26 bytes 1798 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@masterweb sysconfig]# sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1

[root@masterweb sysconfig]# iptables-save
# Generated by iptables-save v1.4.21 on Mon Aug 24 02:35:48 2020
*mangle
:PREROUTING ACCEPT [478:45325]
:INPUT ACCEPT [465:43401]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [297:46952]
:POSTROUTING ACCEPT [297:46952]
COMMIT
# Completed on Mon Aug 24 02:35:48 2020
# Generated by iptables-save v1.4.21 on Mon Aug 24 02:35:48 2020
*nat
:PREROUTING ACCEPT [7:1456]
:INPUT ACCEPT [7:1456]
:OUTPUT ACCEPT [3:208]
:POSTROUTING ACCEPT [3:208]
-A POSTROUTING -o ens34 -j MASQUERADE
-A POSTROUTING -s 192.168.10.0/24 -o ens33 -j MASQUERADE
COMMIT
# Completed on Mon Aug 24 02:35:48 2020
# Generated by iptables-save v1.4.21 on Mon Aug 24 02:35:48 2020
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ens34 -j ACCEPT
-A INPUT -p icmp -m icmp —icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp —icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp —icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp —icmp-type 8 -j ACCEPT
-A INPUT -i ens33 -j ACCEPT
-A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state —state INVALID -j DROP
-A INPUT -p tcp -m tcp —tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! —tcp-flags FIN,SYN,RST,ACK SYN -m state —state NEW -j DROP
-A INPUT -i ens33 -p tcp -m tcp —dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 443 -j ACCEPT
-A INPUT -i ens33 -p udp -m udp —dport 53 -j ACCEPT
-A INPUT -i ens34 -p udp -m udp —dport 53 -j ACCEPT
-A FORWARD -j ACCEPT
-A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state —state INVALID -j DROP
-A FORWARD -i ens34 -o ens33 -j ACCEPT
-A FORWARD -i ens33 -o ens34 -j REJECT —reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o ens34 -j ACCEPT
-A OUTPUT -o ens33 -j ACCEPT
-A OUTPUT -m state —state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! —tcp-flags FIN,SYN,RST,ACK SYN -m state —state NEW -j DROP
COMMIT
# Completed on Mon Aug 24 02:35:48 2020

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Ярлык на рабочий стол linux
  • Яндекс строка для linux
  • Яндекс программы для linux
  • Яндекс навигатор для linux
  • Яндекс диск монтирование linux