Свой роутер на debian

Debian. Настройка роутера (NAT + DHCP + Squid)

Наиболее частым применением Linux серверов является организация общего доступа в интернет. Это обусловлено низкой стоимостью такого решения и невысокими требованиями к железу. Во многих случаях это бывает первый Linux сервер в организации, что способно вызвать у администраторов определенные сложности. В данной статье мы пошагово рассмотрим настройку роутера (NAT + DHCP + Squid) на базе Debian Wheezy 7.0

Установка и первоначальная настройка

Установка Debian Wheezy 7.0 происходит в текстовом режиме на русском языке и, как правило, не вызывает сложностей. Отдельно стоит только остановится на списке ролей: из предложенного нас, пожалуй, может заинтересовать только OpenSSH, для удаленного доступа, однако воспользовавшись пунктом Manual package selection опытный пользователь может сразу установить необходимые ему пакеты.

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

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

Эта команда откроет в консольном редакторе nano конфигурационный файл с сетевыми интерфейсами, аналогичный рисунку ниже.

Пока там прописан единственный интерфейс eth0, настроенный на работу по DHCP. К eth0 у нас подключен ADSL модем (или любая сеть провайдера), а eth1 смотрит во внутреннюю сеть. IP адрес на внешнем интерфейсе 192.168.1.2, шлюз (ADSL модем) 192.168.1.1, внутренняя сеть лежит в диапазоне 192.168.3.1 — 254. Тогда настройки будут выглядеть следующим образом:

Сохраняем изменения Ctrl+O и выходим Ctrl+X. Теперь нужно настроить DNS, для этого выполняем:

В этом файле необходимо указать адреса DNS серверов, лучше всего указать DNS провайдера или, как в нашем случае, Google DNS.

Сохраняем. Теперь нужно перезапустить сетевые службы (либо перезагрузиться):

Собственно сеть настроена, можно переходить к следующему этапу, однако мы рекомендуем установить еще несколько пакетов для удобства администрирования. Сначала обновим список доступных пакетов:

Также рекомендуем обновить версии пакетов до актуальных:

Теперь установим Midnight Commander (mc), файловый менеджер по образу и подобию Norton Commander или Far:

Для запуска Midnight Commander достаточно набрать в консоли его краткое имя: mc. Сразу рекомендуем включить встроенный редактор, более удобный чем nano: F9 — Настройки — Конфигурация — Встроенный редактор.

Для удаленного управления сервером (не бегать же к нему каждый раз) установим OpenSSH, что позволит подключаться к нему из любого места, даже из дома, по защищенному протоколу:

Для подключения с Windows станций можно использовать программу PuTTY (скачать), для корректного отображения символов перед подключением необходимо на закладке Window — Translation выбрать кодировку UTF8.

Для ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers с указанием пользователя имеющего доступ по SSH, например для пользователя admin:

Также можно разрешить доступ определенной группе пользователей используя параметр AllowGroups, либо запретить доступ определенным пользователям / группам использовав DenyUsers и DenyGroups.

Настраиваем NAT

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

Потом откроем его в редакторе Midnight Commander (F4) и внесем следующий текст:

Сохраняем (F2), для автоматического запуска скрипта снова открываем /etc/network/interfaces и в самый конец файла дописываем:

Также не забываем дать нашему скрипту права на исполнение:

Если нигде не допущено ошибок все должно работать. Для проверки укажем на машинах внутренней сети в качестве шлюза и DNS адрес нашего роутера: 192.168.3.1 и пропингуем любой внешний адрес, например один из Google DNS серверов: 8.8.8.8. Но интернет пока работать не будет. Почему? Да потому, что мы указали в качестве DNS сервера наш роутер, который пока таковым не является. Можно конечно явно прописать DNS на клиентской машине,однако, это не наш метод, если вдруг DNS сервера изменятся, нам что, бегать перепрописывать?

Читайте также:  Zyxel keenetic huawei 3372h

Одно из решений: поднять на нашем роутере полноценный DNS сервер, но в большинстве случаев это избыточно, поэтому мы ограничимся простым кэширующим DNS (а также и DHCP) сервером Dnsmasq.

После установки открываем /etc/dnsmasq.conf, находим, раскомментируем и изменяем следующим образом строку, чтобы разрешить серверу принимать DNS запросы из внутренней сети.:

Перезапускаем DNS сервер:

После чего на клиентских машинах должен заработать интернет.

Настраиваем DHCP

Теперь, когда наш сервер работает, нужно настроить клиентские машины. Можно, конечно, прописать все параметры вручную, но как быть если клиентских машин много и расположены они по всему зданию? Здесь нам на выручку приходит протокол DHCP, который позволяет клиентским машинам получать сетевые настройки автоматически. В качестве DHCP сервера выступит уже установленный Dnsmasq. Настроить его не просто, а очень просто, для чего снова открываем /etc/dnsmasq.conf.

Все что нам надо, это задать диапазон выдаваемых адресов (в нашем случае 192.168.3.10-150), сетевую маску и время, на которое выдается IP адрес:

Адреса DNS сервера и шлюза сервер берет автоматически из системных настроек. Еще раз перезапускаем Dnsmasq:

Теперь можно выставить на клиенте автоматическое получение IP адреса и убедиться, что все работает нормально.

Просмотреть выданные адреса можно командой:

В выдаче будут перечислены выданные IP адреса и MAC адреса которым они выданы.

Настраиваем кэширующий прокси-сервер Squid

В любой большой сети определенная часть трафика повторяется от пользователя к пользователю и порой его доля доходит до 50%. Логично бы было кэшировать наиболее повторяющиеся запросы и тем самым снизить нагрузку на канал, сэкономить входящий трафик и ускорить выдачу страниц конечному пользователю. Для этих задач мы используем Squid — кэширующий прокси с широчайшими возможностями.

Останавливаем прокси-сервер и приступаем к настройке:

Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомменитровать:

Указываем порт и адрес на котором squid будет принимать соединения:

Указываем внутренние сети, лишние комментируем:

Разрешаем доступ из внутренних сетей (найти и раскомменитровать):

Устанавливаем лимит использования памяти:

Задаем язык вывода ошибок для пользователя

Сохраняем файл конфигурации. Теперь строим кэш и запускаем:

Для проверки указываем в браузере на клиентской машине использование прокси-сервера с адресом 192.168.3.1 и портом 3128, убеждаемся что все работает. Остается настроить прозрачную работу прокси-сервера, чтобы http трафик заворачивался на Squid автоматически, без прописывания прокси на клиенте. Для этого открываем /etc/nat и дописываем в конец строку:

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

Источник

Простой рoутер на Debian

Как-то в моей маленькой домашней локальной лаборатории потребовалось изолированной сети, в которой присутствуют только виртуальные машины только с адаптерами внутреней сети, дать доступ в Интернет, не добавляя адаптеров типа NAT. Сказано — сделано.

Все действия я провожу с машинами в VirtualBox. Мне потребуется создать еще 1 машину — роутер, которая будет являться шлюзом для других VM и будет предоставлять доступ в Интернет.

В качестве роутера будет выступать виртуальная машинка на борту у которой минимальный Debian.

Создаем новую виртуальку, для которой назначаем 2 сетевых интерфейса первый тип подключения NAT, а второй с типом подключения внутренняя сеть.

Следующим этопом, на котором я не буду останавливаться — установка Debian. А дальше переходим к настройка сети.

Мы увидим все имеющиеся сетевые интерфейсы, у меня это enp0s3 и enp0s8. Первый это моя сеть с интернетом, а второй является внутренней сетью. Дальше переходим к настройке сетевых интерфейсов. отредактировав файл interfaces выполним команду:

и выполним настроку второго интерфейса, дописав к файлу его конфигурацию

iface enp0s8 inet static

Далее можно поднять второй интерфейс и попинговать адрес 172.30.0.1 c другой машины в этой сети.

Следующим этапом нужно разрешить маршрутизацию и настроить правила iptables. Разрешаем маршрутизацию отредактировав файл sysclt.conf выполнив команду:

раскоментируем строку net.ipv4.ip_forward = 1.

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

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

# iptables -A FORWARD -s 172.30.0.0/24 -j ACCEPT

# iptables -P FORWARD DROP

# iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

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

Осталось зафиксировать в автозагрузке правила iptables (подробно описано в статье Debian: автозагрузка iptables и ip6tables) и можно пожимать свои плоды.

Источник

Строим маршрутизатор в SOCKS на ноутбуке с Debian 10

Целый год (или два) я откладывал публикацию данной статьи по главной причине — мной уже были опубликованы две статьи, в которых я описал процесс создания маршрутизатора в SOCKS из самого обычного ноутбука с Debian.

Читайте также:  Аккумулятор для wifi роутера мтс 8920ft

Однако, с тех пор стабильная версия Debian обновилась до Buster, мне в личку обратилось достаточное количество людей с просьбой помочь в настройке, а значит, мои предыдущие статьи не являются исчерпывающими. Что ж, я и сам догадывался, что методы, изложеннные в них, не до конца раскрывают все тонкости настройки Linux для маршрутизации в SOСKS. К тому же они написаны для Debian Stretch, а после обновления до Buster, в системе инициализации systemd, я заметил небольшие изменения во взаимодействии служб. Да и в самих статьях я не использовал systemd-networkd, хотя она лучше всего подходит для сложных сетевых конфигураций.

Кроме вышеуказаных изменений, в мою конфигурацию добавились такие службы как hostapd — служба для виртуализации точки доступа, ntp для синхронизации времени клиентов локальной сети, dnscrypt-proxy для шифрования соединений по протоколу DNS и отключения рекламы на клиентах локальной сети, а также, как я упомянал ранее, systemd-networkd для конфигруации сетевых интерфейсов.

Вот простейшая блок-схема, внутреннего устройства такого маршрутизатора.

Итак, я напомню, какие цели преследует цикл данных статей:

  1. Маршрутизировать в SOCKS все соединения ОС, а также соединения всех устройств, состоящих в одной сети с ноутбуком.
  2. Ноутбук в моем случае должен оставаться полностью мобильным. То есть, давать возможность использовать окружение рабочего стола и не быть привязанным к физическому местуположению.
  3. Последний пункт подразумевает подключение и маршрутизацию только через встроенный беспроводной интерфейс.
  4. Ну, и конечно, создание исчерпывающего руководства, а также разбор соответсвующих технологий в меру моих скромных познаний.

Что будет рассмотрено в данной статье:

  1. git — скачаем репоизитории проектов tun2socks, необходимого для маршрутизации трафика TCP в SOCKS, и create_ap — скрипта для автоматизации настройки виртуальной точки доступа с помощью hostapd.
  2. tun2socks — построим и установим в систему службу systemd.
  3. systemd-networkd — настроим беспроводной и виртуальные интерфейсы, таблицы статической маршрутизации и перенаправление пакетов.
  4. create_ap — установим службу systemd в систему, настроим и запустим виртуальную точку доступа.

Необязательные шаги:

  • ntp — установим и настроим сервер для сихронизации времени на клиентах виртуальной точки доступа.
  • dnscrypt-proxy — зашифруем запросы DNS, маршрутизируем их в SOCKS и отключим рекламные домены для локальной сети.

Зачем всё это?

Это один из способов организации защиты TCP-соединений локальной сети. Главное преимущество — все соединения идут в SOCKS, если для них не построен статический маршрут через оригинальный шлюз. Это значит, что не нужно прописывать настройки SOCKS-сервера ни отдельным программам, ни клиентам в локальной сети — они все идут в SOCKS по-умолчанию, так как он является шлюзом по-умолчанию, пока мы не укажем обратного.

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

С точки зрения провайдера мы постоянно подключены к одному серверу с зашифрованным трафиком.

Соответственно, все устройства подключаются к виртуальной точке доступа ноутбука.

Прежде, чем вы начнете

Почти все конфиги доступны в репозитории.

Установите в систему tun2socks

Пока на вашей машине есть интернет, скачайте все необходимые инструменты.

Скачайте пакет badvpn

В вашей системе появится папка badvpn. Создайте отдельную папку для сборки

Перейдите в нее

Установите в систему

  • Параметр -DBUILD_NOTHING_BY_DEFAULT=1 отключает сборку всех компонентов репозитория badvpn.
  • DBUILD_TUN2SOCKS=1 включает в сборку компонент tun2socks.
  • make install — установит бинарник tun2socks в вашу систему по адресу /usr/local/bin/badvpn-tun2socks.

Установите службу tun2socks в systemd

Создайте файл /etc/systemd/system/tun2socks.service со следующим содержимым:

  • —tundev — принимает имя виртуального интерфейса, который мы инициализируем с помощью systemd-networkd.
  • —netif-ipaddr — сетевой адрес «маршрутизатора» tun2socks, к которому подключается виртуальный интерфейс. Лучше сделать отдельной зарезервированной подсетью.
  • —socks-server-addr — принимает сокет (адрес: порт сервера SOCKS).

Если ваш SOCKS сервер требует аутентификации, вы можете указать параметры —username и —password.

Далее зарегистрируйте службу

Прежде чем запускать службу, обеспечим её виртуальным сетевым интерфейсом.

Переходим на systemd-networkd

Отключаем текущие сетевые службы.

  • NetworkManager-wait-online — это служба, которая ждет наличие работающего сетевого подключения прежде, чем systemd продолжит запуск других служб, зависящих от наличия сети. Мы отключаем её, так как перейдем на аналог systemd-networkd.

Давайте сразу включим его:

Настройте беспроводной сетевой интерфейс

Создайте файл конфигурации systemd-networkd для беспроводного сетевого интерфейса /etc/systemd/network/25-wlp6s0.network .

  • Name — это имя вашего беспроводного интерфейса. Идентифицируйте его командой ip a.
  • IPMasquerade — директива, которая включает маскарадинг и перенаправление пакетов на сетевом интерфейсе.
  • Address отвечает за присвоение IP-адреса беспроводному интерфейсу. Мы указываем его статически потому, что при эквивалентной директиве DHCP=yes, systemd-networkd создаёт в системе шлюз по-умолчанию. Тогда весь трафик пойдет через оригинальный шлюз, а не через будущий виртуальный интерфейс в отличной подсети. Вы можете проверить текущий шлюз по-умолчанию командой

Создайте статический маршрут для удалённого сервера SOCKS

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

  • Gateway — это шлюз по-умолчанию или адрес вашей оригинальной точки доступа.
  • Destination — адрес сервера SOCKS.
Читайте также:  Удаленный доступ home assistant через keenetic

Настройте wpa_supplicant для systemd-networkd

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

Поэтому создайте ее командой:

Я использовал wlp6s0 в качестве имени своего беспроводного интерфейса. У вас это имя может отличаться. Вы можете узнать его командой .

Теперь созданная служба wpa_supplicant@wlp6s0 будет запускаться при «поднятии» беспроводного интерфейса, однако она, в свою очередь, будет искать настройки SSID и пароля точки доступа в файле /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Поэтому необходимо создать его с помощью утилиты wpa_passphrase.

Для этого выполните команду:

где SSID — это имя вашей точки доступа, password — пароль, а wlp6s0 — имя вашего беспроводного интерфейса.

Инициализируйте виртуальный интерфейс для tun2socks

Создайте файл для инициализации нового вирутального интерфейса в системе /etc/systemd/network/25-tun2socks.netdev

  • Name — это имя, которое systemd-networkd назначит будущему виртуальному интерфейсу при его инициализации.
  • Kind — это тип виртуального интерфейса. Исходя из названия службы tun2socks, вы можете догататься, что она использует интерфейс типа tun.
  • netdev — это расширение файлов, которые systemd-networkd использует для инициализации виртуальных сетевых интерфейсов. Адрес и другие сетевые настройки для этих интерфейсов указываются в .network файлах.

Создайте такой файл /etc/systemd/network/25-tun2socks.network со следующим содержимым:

  • Name — имя виртуального интерфейса, которое вы указали в netdev файле.
  • Address — IP адрес, который будет назначен вирутальному интерфейсу. Должен быть в одной сети с адресом, который вы указали в службе tun2socks
  • Gateway — IP адрес «маршрутизатора» tun2socks, который вы указали при создании службы systemd.

Таким образом, интерфейс tun2socks имеет адрес 172.16.1.2, а служба tun2socks172.16.1.1, то есть является шлюзом для всех соединений с виртуального интерфейса.

Настройте виртуальную точку доступа

Скачайте репозиторий сreate_ap на свою машину:

Перейдите в папку репозитория на вашей машине:

Установите в систему:

В вашей системе появится конфиг /etc/create_ap.conf. Вот основные опции для правки:

  • GATEWAY=10.0.0.1 — лучше сделать отдельной зарезервированной подсетью.
  • NO_DNS=1 — выключите, так как этим параметром будет управлять виртуальный интерфейс systemd-networkd.
  • NO_DNSMASQ=1 — выключите по той же причине.
  • WIFI_IFACE=wlp6s0 — беспроводной интерфейс ноутбука.
  • INTERNET_IFACE=tun2socks> — виртуальный интерфейс, созданный для tun2socks.
  • SSID=hostapd — имя виртуальной точки доступа.
  • PASSPHRASE=12345678 — пароль.

Не забудьте включить службу:

Включите DHCP сервер в systemd-networkd

Служба create_ap инициализирует в системе виртуальный интерфейс ap0. По идее, на этом интерфейсе «висит» dnsmasq, но зачем устанавливать лишние службы, если systemd-networkd содержит встроенный DHCP-сервер?

Чтобы включить его, определим сетевые настройки для виртуальной точки. Для этого создайте файл /etc/systemd/network/25-ap0.network со следующим содержимым:

После того, как служба сreate_ap инициализирует виртуальный интерфейс ap0, systemd-networkd автоматически присвоит ему IP-адрес и включит DHCP-сервер.

Строки EmitDNS=yes и DNS=10.0.0.1 передают настройки DNS сервера устройствам, подключенным к точке доступа.

Если вы не планируете использовать локальный DNS сервер, — в моём случае это dnscrypt-proxy — можете установить DNS=10.0.0.1 в DNS=192.168.1.1, где 192.168.1.1 — адрес вашего оригинального шлюза. Тогда запросы DNS вашего хоста и локальной сети пойдут в незашифрованном виде через серверы провайдера.

EmitNTP=yes и NTP=192.168.1.1 передают настройки NTP.

То же самое касается строки NTP=10.0.0.1.

Установите и настройте NTP сервер

Установите в систему:

Правьте конфиг /etc/ntp.conf. Закомментируйте адреса стандартных пулов:

Добавьте адреса публичных серверов, например, Google Public NTP:

Предоставьте доступ к серверу клиентам из вашей сети:

Включите трансляцию в вашу сеть:

Наконец, добавьте адреса этих серверов в таблицу статической маршрутизации. Для этого откройте файл конфигурации беспроводного интерфейса /etc/systemd/network/25-wlp6s0.network и добавьте в конец секции Route.

Вы можете узнать адреса ваших серверов NTP, используя утилиту host следующим образом:

Установите dnscrypt-proxy, уберите рекламу и скройте DNS трафик от провайдера

Чтобы обслуживать DNS запросы хоста и локальной сети, правьте сокет /lib/systemd/system/dnscrypt-proxy.socket. Измените следующие строки:

Правьте конфиг /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

Чтобы направить соединения dnscrypt-proxy через tun2socks, добавьте ниже:

Правьте конфиг /etc/resolv.conf, который сообщает DNS сервер хосту.

Первая строчка включает использование dnscrypt-proxy, вторая — использует оригинальный шлюз, в случае, когда сервер dnscrypt-proxy недоступен.

Готово!

Перезагрузитесь или остановите действующие сетевые службы:

И перезапустите все необходимые:

После перезагрузки или перезапуска у вас появится вторая точка доступа, которая маршрутизирует хост и устройства локальной сети в SOCKS.

Примерно так выглядит вывод обычного ноутбука:

В итоге

Костыль, замеченный на Debain 10

Если попытаться перезапустить сетевую службу из консоли, то она упадет с ошибкой. Связанно это с тем, что её часть в виде виртуального интерфейса привязана к службе tun2socks, а значит используется. Чтобы перезапустить сетевую службу, сначала нужно остановить службу tun2socks. Но, я думаю, если вы дочитали до конца, для вас это точно не проблема!

Источник

Adblock
detector