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

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

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

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

Введение

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

# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

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

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

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

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

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

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

# yum -y update

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

# yum -y install mc

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

# mcedit /etc/sysconfig/selinux

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

SELINUX=disabled

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

# reboot

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

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

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

# systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service

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

# systemctl enable network.service

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

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

HWADDR=00:15:5D:01:0F:06
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
NAME="eth0"
UUID="4e65030c-da90-4fb8-bde4-028424fe3710"
ONBOOT="yes"
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
HWADDR=00:15:5d:01:0f:12
TYPE=Ethernet
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0

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

# systemctl restart network.service

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

# ip a

Сетевые параметры в CentOS 7

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

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

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

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

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

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

# sysctl -p

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

Отключаем firewalld:

# systemctl stop firewalld
# systemctl disable firewalld

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

# yum -y install iptables-services

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

# Внешний интерфейс
export WAN=eth0
export WAN_IP=192.168.1.25
# Локальная сеть
export LAN1=eth1
export LAN1_IP_RANGE=192.168.10.1/24

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

# chmod 0740 /etc/iptables.sh

Запускаем iptables:

# systemctl start iptables.service

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

# systemctl enable iptables.service

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

# /etc/iptables.sh

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

# iptables -L -v -n

активные правила iptables

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

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

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

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

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

# rpm -qa | grep dnsmasq
dnsmasq-2.66-14.el7_1.x86_64

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

# yum -y install dnsmasq

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

# mcedit /etc/dnsmasq.conf

domain-needed
bogus-priv
interface=eth1
dhcp-range=192.168.10.50,192.168.10.150,24h

Запускаем dnsmasq:

# systemctl start dnsmasq

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

# systemctl restart dnsmasq

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

# systemctl enable dnsmasq

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

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

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

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

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

# yum -y install epel-release

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

# yum -y install iftop

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

# iftop

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

# iftop -i eth1 -P

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

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

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

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

Заключение

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

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

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

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

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

Онлайн курс "DevOps практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

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

  1. МайскийЖук
    МайскийЖук

    Я не понял, а где процесс прописывания данных для установки связи с интернетом по PPPoE? В конкретно вашем примере карта eth0 смотрит в интернет. И что? Где логин? Где пароль для установки связи с интернетом? o_O

    • Zerox

      А при чем тут PPPoE? Это частный случай и весьма редкий. У меня лично за всю карьеру был только один шлюз с PPPoE, а настроил я их десятки.

      • МайскийЖук
        МайскийЖук

        Да какой редкий-то? Большинство провайдеров страны предоставляет интернет по PPPoE, поэтому для сетевой карты, смотрящей в интернет, необходимо устанавливать именно PPPoE-соединение. С вышеприведённая конфигурация интернет локальной сети НЕ раздаёт.

        • Zerox

          У меня другая статистика. Я чаще всего у юриков, а сейчас и физлиц, вижу ethernet. Все остальное экзотика.

          • МайскийЖук
            МайскийЖук

            То есть, никаких высокоскоростных соединений с помощью роутеров уже устанавливать не надо? Тупо UTP-кабель, и всё? Провайдер раздаёт интернет как в локальной сети что ли?

            Я тут явно чего-то не понимаю. Ethernet — это Ethernet, на нём основаны именно _локальные_ сети в организациях. А интернет провайдеры предоставляют либо по PPPoE, либо, что реже, по L2TP. По крайней мере, у меня в городе именно так, я знаю всех провайдеров города.

            Так что всё-таки предлагаю дополнить статью информацией об установке rp-pppoe в CentOS 7 и pppoe-setup для настройки высокоскоростного соединения.

            • Аватар

              Вам бы теорию подтянуть, чтоли.. PPPoE это по большому счету VPN-канал. Он нужен был для того, чтобы не напрягаясь можно было скорость ограничивать. Технологии давно ушли вперед, и теперь достаточно знать mac клиента, а еще лучше так организовать свою сеть, чтобы точно знать, на каком порту висит канал к клиенту. И все. А это в современном мире прям в два счета делается. И никакого PPPoE с его потерей ширины канала на шифрование трафика больше не нужно.
              А то, что у вас в городе провайдеры используют старое оборудование и не хотят учиться использовать новое ПО — это сугубо их проблемы.

              • МайскийЖук
                МайскийЖук

                Вам бы тоже теорию подтянуть что ли. Вы из своей Москвы-то выйдите хотя бы километров на 200-400 и убедитесь, что окромя Москвы с её технологиями существует ещё и другая Россия, где тот же Ростелеком (и прочие провайдеры) предоставляют интернет именно по PPPoE, и никак иначе. Ваш пафос по поводу современного мира совершенно неуместен. Если данная статья выше расчитана исключительно на москвичей — ну, пожалуйста, буду учитывать это при прочтении других статей в будущем.

                • Аватар

                  У меня родня в тамбове, я знаю, что происходит в 600км от столицы.
                  И я не видел НИ РАЗУ, чтобы клиенты на провод, приходящий от провайдера сажила СЕРВЕР с CentOS, чтобы на нем шлюз разворачивать. На провод вешается коммутатор, который легчайше поднимает PPPoE, и раздает пьюр инет в сервер-шлюз. А в идеале не пьюр инет даже, а уже слегка фильтрованный, на всякий случай.
                  Так что еще раз предлагаю подучить матчасть и пересмотреть архитектуру сети, изучить best practics и т.д.

                  • МайскийЖук
                    МайскийЖук

                    Ну, тогда я тоже настойчиво предлагаю изучить матчасть и убедиться в том, что нормальные администраторы на периферии (за Москву не буду расписываться), наобщавшись с техподдержкой Ростелекома и наиспользовавшись их дебильных роутеров ZTE, создают свои собственные роутеры (они же шлюзы) из не сильно мощных компьютеров с основой на Linux. Так же сделал и я для своей организации. Зато теперь роутингом управляю именно я, а не непонятная китайская хрень, в которой даже правила нормально настроить невозможно. Да даже изначально не понимаю, в чём смысл городить городушки из нескольких устройств, если их количество можно сократить? Зачем мне отдельно роутер, отдельно шлюз и ещё что-либо отдельно, если используемая машина позволяет это прекрасно объединить?

                    • Аватар

                      Зачем нужна дорога, если через нее нельзя перевести бабку? (с)
                      Зачем ZTE?
                      Зачем вам шлюз, если можно использовать тот же Microtik и сократить расходы на закупку железного шлюза и на электроэнергию?
                      Не понимаю я вас. Странные вы там у себя в деревнях..

            • Zerox

              Да, у всех простой ethernet. Провайдер проводит кабель в помещение и все. Настройки либо статика, либо по dhcp. Так сейчас почти везде, где я вижу интернет. В том числе в квартирах у физиков. А у юриков я всегда такое видел. Увидеть PPPoE или vpn для подключения к интернету это редкость. По крайней мере в Москве.

              А так как я в основном сервера в ЦОДах настраиваю, там ничего, кроме ethernet и нету.

  2. Аватар

    Написал «в цепочке INPUT» в 6-м вопросе. Подумал. Больше в FORWАRD наверное, раз шлюз.
    И ще один вопрос тогда
    Мы чистим таблицу mangle, хотя ее не используем в скрипте.
    $IPT -F -t mangle
    $IPT -t mangle -X
    Зачем?

  3. Аватар

    Спасибо за статью и подробное объяснениею. Есть несколько вопросов.
    1. Зачем
    $IPT -A OUTPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT ?
    если есть
    $IPT -A OUTPUT -o $WAN -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT
    $IPT -A OUTPUT -o $LAN1 -j ACCEPT
    Если бы не было 3-х последних (в скрипте они идут первыми), то сервер не смог бы установить исходящее соединение — наверное, DNS бы не резолвился, например
    Тогда, $IPT -A OUTPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT просто лишнее (или копипаст :)), тем более это правило добавится последним (ключ -A). Правильно?
    2. $IPT -A OUTPUT -p tcp ! —syn -m state —state NEW -j DROP. Сдесь мы защищаем Интернет от атак со своего хоста? . Тем более мы уже открыли все интефейсы на OUTPUT на еще раньше в скрипте. Мне не понятно :(
    3. Если у нас есть статический IP (85.31.203.127 в скрипте) на интерфейсе, который смотрит «в мир», почему мы не можем использовать —to-source SNAT вместо MASQUERADE?
    4. Если мы НАТим (Маскарадим) только определенные локальные IP LAN1_IP_RANGE=10.1.3.0/24 в -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE, почему бы не огрничтить эти адреса и в $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT — чтобы не выпускать наружу локальные (серые) адреса вне диапазона 10.1.3.0/24?
    5. Наличие 3-х нижних правил вместе в одном скрипте мне тоже не понятно если есть всего 2 интерфеса (как и в.1.)
    $IPT -A FORWARD -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
    $IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
    6. Может правила с —state ESTABLISHED,RELATED поднять повыше в скрипте — в шлюзе через них, скорее всего, основной трафик будет идти, пусть лучше первыми срабатывают в цепочке INPUT?
    7. Вместо -m state —state ESTABLISHED,RELATED лчуше бы использовать в учебных целях (ИМХО, конечно) -m conntrack —ctstate ESTABLISHED,RELATED, т.к. первые считаются устаревшими хотя и потдерживаются
    Спасибо.

    • Zerox

      На первый взгляд замечания по существу. Не готов сейчас подробно разбирать правила, немного отошел уже от этой темы. По первому пункту однозначно это правило должно быть в самом начале. Возможно, когда писал статью, раскомментировал то, что у меня самого стоит в блокировке. Я сделал более либеральные правила. Из-за этого нарушилась логика работы, но не функционал. По-умолчанию я блокирую все, что не разрешено, используя этот универсальный конфиг. Отсюда же чистится цепочка mangle, которая реально не используется в данном случае. В пятом пункте то же самое. Открыв всю локалку наружу, я просто упростил правила, и предыдущее с ESTABLISHED,RELATED стало бесполезным.

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

  4. Аватар

    Вообще итоговая цель — шлюз с https прокси на squid, может что нибудь посоветуете (статьи, другой дистрибутив)?

  5. Аватар

    Здравствуйте. Подскажите в чём проблема. Включаю iptables и клиент перестаёт получать настройки автоматом, выключаю всё работает?

    • Zerox

      Неверно правила для iptables составили. Скорее всего блокируете на сервере все входящие соединения.

      На всякий случай уточню. Вы какие настройки клиента имеете ввиду? Сетевые?

      • Аватар

        Да, конечно, iptables ваши (естественно с моими названиями сетевых и IP). Единственное, я использовал только эту статью. У меня всё на виртуалке одна сетевая в инет по DHCP вторая в локалку. И инет тоже не даёт клиенту даже при выключенном iptables, sysctl сделано.

        • Аватар

          DHCP-запрос — широковещательный, его не рекомендуется разрешать для шлюзования. Вам надо поднять DHCP-сервер и DNS-сервер (активный, а не просто маскарад) во внутренней сети (можно на том же шлюзе). И разрешить в iptables широковещательные запросы на внутреннюю сетевую. Я бы советовал вообще поднять домен во внутренней сети (сам так и сделал), но тут тонкий момент, что в настройках сетевых карт должен быть указан сначала DNS-сервер шлюза, а вторым — внутренний, если он есть, иначе винда не хочет в интернет ходить.
          А proxy и squid это совершенно другая пьянка.

          • Аватар

            Дело в том, что есть физический сервер на котором нужно настроить роутер + proxy, для фильтрации инета и ограничения скорости по группам. Чтобы не мучить железо, решил создать лабораторную среду на virtualbox, может я сеть не так настроил на виртуальных машинах (внешняя сетивуха мостом, а внутренняя «Внутренняя сеть»)? В итоге не получается поднять шлюз, тоесть виртуальный клиент виртуального сервера получает настройки от dnsmasq но в интернет не выходит….

            • Аватар

              Походу точно накосячил с iptables, подскажите что нужно раскоментировать или дописать в скрипте из статьи, чтобы входящий трафик шел во внутреннюю сеть. Внешняя — enp0s3, IP — 192.168.1.142/24. Внутренняя — enp0s8, IP — 10.0.0.1/22

              • Zerox

                В статье как раз этой случай и описан. Могу только предложить еще раз ее внимательно прочитать.

                • Аватар

                  Извиняюсь за настойчивость и тупость, всё из за спешки (прокуратура не дремлет), а тут спешить нельзя… Всё заработало!!!!
                  Огромное спасибо за Ваши статьи и помощь страждущим!!!

  6. Аватар

    Бьюсь 5й день. Поднял виртуалки на гипервизоре. Не могу заставить ВМ из внутренней сети ходить в инет через шлюз на центосе7. С ВМ внутри сети ходят пинги на внутренний и внешний интерфейсы центоси, но дальше — ни шагу. Сам центось пингует ya.ru нормально.
    Делал все по мануалу вплоть до маскарада дхцп, но как я понимаю в тестовой среде это не важно, надо просто заставить ходить в инет пакеты. А они не ходят..
    Схема подключения такая: пк виндовый с «частным виртуальным коммутатором», центос с «частным» + «по умолчанию» (на 2м включен NAT, и он связывает ВМ с хостом и далее дает доступ в инет, хост подключен к роутеру, в тот приходит оптика.
    В чем может быть косяк? Куда копать?

    • Zerox

      По описанию похоже, что не сделано вот это, либо сделано неправильно.

      Находим файл /etc/sysctl.conf и вставляем туда строку:
      # mcedit /etc/sysctl.conf
      net.ipv4.ip_forward = 1
      Чтобы заработала настройка, выполняем команду:
      # sysctl -p

      • Аватар

        Перед и после знака равенства — пробелы! А я их не написал по аналогии со всеми остальными .конф файлами..
        Спасибо!

        • Zerox

          Заработало?

          • Аватар

            Ну.. Из 2х машин, один из которых контроллер домена, а вторая — рядовой сервер в этом домене. Доступ в инет есть только у рядового сервера, DC в инет не хочет по-прежнему. Почему так — понять не могу. Настройки сети такие же, за исключением IP, естественно. буду копать дальше.

            • Zerox

              Если хоть один комп выходит в интернет, значит шлюз работает нормально. Возможно где-то в настройках просто опечатка. Так часто бывает.

  7. Аватар
    VasiliPetrovich

    Мы предотвратили попытку войти в аккаунт из небезопасного приложения.
    Небезопасное приложение
    воскресенье, 24 июня 2018 г., 20:41 (Румыния)
    Romania*

    Автор (Мамкин хакер) походу еще и обидчивый

  8. Аватар

    Да пусть …… автор статьи. всё-таки надо быть отморозком чтоб не пользоваться веб интерфейсами на шлюзах.
    и другим мозг парить. за досом нет будущего, и просмотр логов и биллинг на предприятии через командную строку — не умное решение.

  9. Аватар
    VasiliPetrovich

    Статьи видимо откуда-то перекопированы, потому как полный бред. Не советую ни кому повторять примеры из таких статей.

    • Zerox

      Ну конечно. А 46 тысяч человек, которые перед тобой прочитали статью и не поделились такой важной информацией, дураки. Один ты умный. Что за манера у людей, свое неумение и неспособность понять прочитанное перекладывать на автора, который как минимум, на практике проверил все то, о чем написал.

  10. Аватар

    Здравствуйте, вот такой вопрос, всю настройку проводил только по вашим статьям, есть
    шлюз gw1(CentOS7), eth0 — 10.10.0.4 (статический адрес) и eth1 — 10.10.1.8 (/24)
    за ним есть машина gwtest(CentOS7) — eth0 — 10.10.0.5 (внешний адрес) и eth1 — 10.10.1.9 (/24)
    и есть необходимость чтобы подключиться по ssh (по порту 2345) к этой второй машине через шлюз gw1, машина gwtest не настроена iptables и firewalld я отключил, чтобы не мешали.
    gw1(основные моменты, остальное все как у Вас):
    # Внешний интерфейс
    export WAN=eth0
    export WAN_IP=10.10.0.4

    # Локальная сеть
    export LAN1=eth1
    export LAN1_IP_RANGE=10.10.1.0/24

    # Разрешаем исходящие подключения сервера
    $IPT -A OUTPUT -o $WAN -j ACCEPT
    #$IPT -A INPUT -i $WAN -j ACCEPT

    # Пробрасываем порт в локалку
    $IPT -t nat -A PREROUTING -p tcp —dport 2345 -i ${WAN} -j DNAT —to 10.10.1.9:2345
    $IPT -A FORWARD -i $WAN -d 10.10.1.9 -p tcp -m tcp —dport 2345 -j ACCEPT

    # Разрешаем доступ из локалки наружу
    $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
    # Закрываем доступ снаружи в локалку
    #$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
    # Включаем NAT
    $IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE

    если подключаюсь из gw1 к gwtest — ssh -p 2345 admroot@10.10.1.9 — все ОК
    если подключаюсь на внешний интерфейс gwtest по порту 2345 — все ОК
    если на внешний интерфейс gw по порту 2345 — нехочет
    При этом с помощью iftop на gw:
    ru134.telecom.com:64621 => 10.10.1.9:56371 0b 69b 69b
    <= 0b 0b 0b

    А на gwtest — Пусто, соединений нет.

    Не могу понять, что может блокировать соединение

  11. Аватар

    Zerox, можете чуть подробней описать как работает проброс порта?

    • Zerox

      Есть отдельная статья по iptables, там есть готовый пример. Достаточно только поменять адреса и порты. Описывать работу iptables сложно, так как этот фаервол сам по себе сложный. Документации много в инете, я сам иногда читаю, когда забываю что-то. Есть хорошие статьи с подробным описанием работы на русском. По запросу «iptables проброс портов» все находится. Я стараюсь не писать о том, что уже хорошо описано у других. Пример хорошей статьи по теме — http://www.it-simple.ru/?p=2250

      • Аватар

        Спасибо большое за своевременный ответ, никак не могу побороть ошибку при restart netwrok,
        # /etc/init.d/network restart
        Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See «systemctl status network.service» and «journalctl -xe» for details.
        [СБОЙ ]
        # systemctl status network.service ● network.service — LSB: Bring up/down networking
        Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
        Active: failed (Result: exit-code) since Пт 2018-02-02 11:56:55 MSK; 42s ago
        Docs: man:systemd-sysv-generator(8)
        Process: 2024 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=1/FAILURE)

        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost network[2024]: RTNETLINK answers: File…
        фев 02 11:56:55 serverdsm.localhost systemd[1]: network.service: control p…
        фев 02 11:56:55 serverdsm.localhost systemd[1]: Failed to start LSB: Bring…
        фев 02 11:56:55 serverdsm.localhost systemd[1]: Unit network.service enter…
        фев 02 11:56:55 serverdsm.localhost systemd[1]: network.service failed.
        Hint: Some lines were ellipsized, use -l to show in full.

        уже кучу форумов перечитал, ничего не помогло, думал что мешает NetworkManager, но он отключен
        # systemctl list-unit-files | grep NetworkManager
        NetworkManager-dispatcher.service disabled
        NetworkManager-wait-online.service disabled
        NetworkManager.service disabled
        Но при этому шлюз исправно работает, раздает интернет с двух интерфейсов и по статике и по dhcp, пробовал
        # ip addr flush dev enp6s0 — не помогло, при рестарте всеравно сбой
        вбил вручную в конфиг сетевых HWADDR мак адрес, т.к. почему то эта строка там отсутствовала, а была только UUID, интерфейсы не переименовывал, единственное что все строчки в конфигах без кавычек например BOOTPROTO=none, а у вас «none», и еще интересно нужны ли эти строки?
        DEFROUTE=yes
        PEERDNS=yes
        PEERROUTES=yes
        IPV4_FAILURE_FATAL=no
        Заранее спасибо!

        • Zerox

          Надо полный лог смотреть, тут строки обрезаны.

          • Аватар

            а где этот лог найти? если я сделал как Вы советовали /etc/rsyslog.d/ignore-systemd-session-slice.conf

          • Аватар

            В общем я закоментировал:
            if $programname == «systemd» and ($msg contains «Starting Session» or $msg contains «Started Session» or $msg contains «Created slice» or $msg contains «Starting user-» or $msg contains «Starting User Slice of» or $msg contains «Removed session» or $msg contains «Removed slice User Slice of» or $msg contains «Stopping User Slice of») then stop
            бутнулся и у меня пошли логи в папке /var/log/messages там уже написано:
            Активируется интерфейс enp6s0: [ OK ]
            8139too 0000:06:00.0 enp6s0: link up, 100Mbps, full-duplex, lpa 0x4
            и так все 3 сетевые в том числе и lo
            неужели вся беда в отключении логов?

            • Аватар

              кстати, до того как я закоментировал правило в rsyslog.d у меня папка messages была пустая, поэтому я и спрашивал откуда логи брать на сетевые интерфейсы.

            • Zerox

              Вы просто где-то ошиблись, когда с логами работали. Не может это правило приводить к каким-то проблемам. Я только сегодня его добавлял 2 раза на 2 новых сервера, которые настроил.

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

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

              • Аватар

                Я удалил правило, взял скопировал в «mcedit» со статьи «настройка сервера» и после перезагрузки вроде как все нормально, сетевая служба перезагружается, логов минимально, хотел еще спросить, вот заметил такие логи:
                Dec 6 04:01:01 localhost systemd: Created slice user-0.slice.
                Dec 6 04:01:01 localhost systemd: Starting Session 63 of user root.
                Dec 6 04:01:01 localhost systemd: Started Session 63 of user root.
                Dec 6 05:01:01 localhost systemd: Created slice user-0.slice.
                Dec 6 05:01:01 localhost systemd: Starting Session 64 of user root.
                Dec 6 05:01:01 localhost systemd: Started Session 64 of user root.
                Dec 6 06:01:01 localhost systemd: Created slice user-0.slice.
                Dec 6 06:01:01 localhost systemd: Starting Session 65 of user root.
                Dec 6 06:01:01 localhost systemd: Started Session 65 of user root.
                что они означают?

                • Zerox

                  Можно загуглить, не помню точно. Я вот тут описывал, как их скрыть:
                  https://serveradmin.ru/centos-7-nastroyka-servera/

                  • Аватар

                    так я оттуда и брал правило как скрыть эти логи, просто интересно что означают эти строчки, т.к. в такое раннее время никто не пользовался трафиком сервера.
                    В общем можно сделать вывод что лучше копировать в mc это правило, а не вбивать вручную, скопировать у меня получилось с помощью shift+mouse2, все таки где то наверно я допустил ошибку и сетевая служба ругалась при рестарте. так что правило работает +++
                    Спасибо за Ваш труд!

  12. Аватар

    добрый день, мне нужно сделать две сети LAN, т.е. одна сетевая получает внешний трафик, а две сетевые раздают по внутренним ip например 192.168.1.1 и 192.168.2.1, где и что нужно прописать? заранее спасибо.

  13. Аватар

    подскажите для чего отключаем selinux?

    • Zerox

      Отключил по привычке. Конкретно в этой статье можно было не отключать. Он, по идее, не помешает и дополнительной настройки не потребует.

  14. Аватар

    После остановки, удаления этой службы
    # systemctl stop NetworkManager.service
    # systemctl disable NetworkManager.service
    При выполнении этой команды
    # systemctl enable network.service
    Пишет…
    network.service is not a native service, redirecting to /sbin/chkconfig.
    Executing /sbin/chkconfig network on
    И команда перезапуска службы выдает и завершается ошибкой
    статус команды показывает ошибку…
    не может запустить, нет службы NetworkManager.service
    При обратном возврате…
    # systemctl start NetworkManager.service
    перезагрузка и статус нормально

    После добавления сетевой платы и загрузки почему-то нет, не создается файл конфига этого сетевого интерфейса?

  15. Аватар
    Василий

    Сделал все слово в слово, не заводиться. Ситуация простая, есть сервер, eth0 — на динамике, получает интернет от провайдера, eth1 — должен раздавать адреса и интернет. помогите плз настроить, что могу делать не так?

  16. Аватар

    В правилах iptables стоит запрет снаружи в локалку:

    # Заурываем доступ снаружи в локалку
    $IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

    # Пробрасываем порт в локалку
    $IPT -t nat -A PREROUTING -p tcp —dport 23543 -i ${WAN} -j DNAT —to 10.1.3.50:3389

    но ведь так проброс порта не будет работать. Может есть способ открыть доступ только для этого узла?
    Нечто типа $IPT -A FORWARD -i $WAN -s 10.1.3.50 -j ACCEPT ???

    • Zerox

      Спасибо за верное замечание. Я упоминал этот момент в своей статье про настройку iptables, https://serveradmin.ru/nastroyka-iptables-v-centos-7/#_forward А тут забыл.

      Конечно, нужно открыть доступ для конкретного узла, для которого выполняется проброс:

      $IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT

      Отредактировал скрипт.

  17. Аватар

    Добрый день.
    Есть сервер c двумя карточками:
    одна смотрит в internet с внешним ip XX.XX.XX.XX
    другая во внутренний сеть ip 10.10.40.10/24 gateway 10.10.40.1
    Если я удаляю шлюз 10.10.40.1 то адреса из сети видят интернет, но я, не вижу их из сети XX.XX.XX.XX

  18. Аватар

    Добрый день! А не подскажите, как правильно настроить шлюз с учетом разделения Интернет запросов на разных провайдеров?
    Т.е. имеется сервер с тремя сетевыми картами, 1) LAN (локальная сеть), 2) WAN1 — провайдер 1, 3) WAN2 — провайдер 2. Вопрос с одним провайдером (LAN и WAN1) работает нормально, согласно вашей статье и рекомендациям, но задача стоит так чтобы часть запросов на определенные сайты (ip адреса) уходили на WAN2 не попадая на WAN1, ну и наоборот, то что положено идти через WAN1 не должно попадать на WAN2. Как я понял, нужно правильно настроить iptables, но вот как я что то пока не разобрался, я только пытаюсь познать CentOs 7. Не подскажите как правильно настроить или где и что «копать»?

    • Zerox

      Это уже не тривиальная настройка, но и ничего невозможного. Копать в сторону iproute2, я настраивал недавно, вполне нормально работает. Нужно только четко понимать по каким маршрутам куда ходить. Если нет четкого понимания маршрутов, то тут уже сложнее.

      • Аватар

        Понимания есть, есть определенный список IP адресов веб сайтов (около 10 штук, некоторые прям по IP адресу, некоторые можно по именам, но лучше по ip адресам) котрые должны ходить именно через WAN2, а все остальные запросы через WAN1. У Вас нету такой же подробной статьи по настройке iproute2?

  19. Аватар

    А вот такое при запуске скрипта как лечить?
    ===============
    [root@user]# /etc/iptables.sh
    : Нет такого файла или каталогаn/bash
    /etc/iptables.sh: line 2: $’\r’: команда не найдена
    /etc/iptables.sh: line 4: $’\r’: команда не найдена
    /etc/iptables.sh: line 8: $’\r’: команда не найдена
    /etc/iptables.sh: line 12: $’\r’: команда не найдена
    /etc/iptables.sh: line 14: $’iptables\r’: команда не найдена
    /etc/iptables.sh: line 15: $’iptables\r’: команда не найдена
    /etc/iptables.sh: line 16: $’iptables\r’: команда не найдена
    /etc/iptables.sh: line 17: $’iptables\r’: команда не найдена
    /etc/iptables.sh: line 18: $’iptables\r’: команда не найдена
    /etc/iptables.sh: line 19: $’iptables\r’: команда не найдена
    ….

    • Zerox

      В скрипте ошибка, скорее всего в первой строке:

      #!/bin/bash

      • Аватар

        Да, было: .#!/bin/bash
        но не во всех редакторах эта точка была видна.
        И походу еще вопрос:
        Я так понимаю скрипт надо поместить в автозагрузку? что бы после перегрузки системы эти правила работали.
        Куда лучше? /etc/rc.local

        • Zerox

          Не обязательно. Скрипт сохраняет правила в файл:
          /sbin/iptables-save > /etc/sysconfig/iptables
          Из этого файла система сама автоматом во время загрузки подхватывает правила. Дополнительных действий не требуется.

          • Аватар

            не работает автозагрузка. приходится вручную запускать скрипт.

            • Zerox

              Где-то ошибка значит. Centos загружает правила именно из этого файла. Возможно, н включена автозагрузка самих iptables:
              systemctl enable iptables

              • Аватар

                systemctl enable iptables выполнено. ранее читал что selinux может быть причиной, но он disable. пробовал в rc.local вписать iptables-restore /etc/sysconfig/iptables. не помогло

  20. Аватар

    есть 2 физ интерфейса, 1й смотрит в интернет и получает настройки автоматом от провайдера, второй смотрит в локалку 192.168.1.1, интренет подключается по рррое соединению. Вопрос, что писать в настройка иптаблес в шапке
    # Внешний интерфейс
    export WAN= тот что в инет смотрит или рррое
    export WAN_IP= чей адрес, особенно если он динамический
    и другие настройки будут отличаться от статьи?

    • Zerox

      Я точно не знаю, никогда рррое не доводилось на сервере настраивать. Там новый интерфейс создается при подключении? Если да, то нужно использовать его, соответственно IP тоже его ставить.

  21. Аватар

    Здравствуйте, делаю все по вашей инструкции. И после /etc/iptables.sh получаю : Нет такого файла или каталога /bash
    В чем может быть проблема?

    • Zerox

      В самой первой строке ошибка:

      #!/bin/bash

      • Аватар

        Прогнал через dos2unix, помогло. Но к сожалению не дало желаемого результата. Собственно говоря интерфейс который смотрит в локальную сеть по прежнему не пингуется из других подсетей (кроме своей) IP RANGE расширил до 192.168.0.0/16
        Не подскажите какой маршрут надо добавить?

  22. Аватар

    Добрый день! Отличный сайт и статьи!
    А можно ли не отключать firewalld и не использовать iptables?
    Использование зон (internal,external), маскарадинг и т.п. Если есть опыт — поделитесь))

    • Zerox

      Конечно можно использовать firewalld. Думаю в интернете есть руководства. Я им не пользуюсь, поэтому поделиться нечем, не разбирался с ним. Но думаю там ничего сложного нет. Можно документацию посмотреть на redhat.

  23. Аватар

    Добрый день. Спасибо за подробную инструкцию. Очень подробно все описано.
    Подскажите мне, если сервер1 подключен к нету через прокси (сервер 0), то сможет ли сервер1 раздавать интернет другим компьютерам в его сети, после авторизации на сервере 0???

    • Zerox

      Что за прокси? Традиционно прокси серверы проксируют только http траффик, а это не весь интернет. Так что раздавать полноценно интернет он не сможет. А вот сможет ли он проксировать http траффик, который он получает с первого прокси, я не знаю. Ни разу не сталкивался с такой задачей. Думаю, что это реально, но надо разбираться.

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

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.