Как установить линукс на роутер

Обновлено: 07.07.2024

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

Внимание! Данный материал устарел, при настройке роутера на базе Ubuntu Server 12.04 и старше рекомендуем воспользоваться обновленной статьей.

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

Ubuntu Server отличается от своей настольной версии отсутствием графической оболочки и пользовательских приложений, а также возможностью предустановки заранее выбранных ролей сервера. Несмотря на это, все сказанное будет справедливо для любой версии Ubuntu и, с некоторыми поправками, для любого Linux дистрибутива. Установка Ubuntu Server происходит в текстовом режиме на русском языке и, как правило, не вызывает сложностей. Отдельно стоит только остановится на списке ролей: из предложенного нас, пожалуй, может заинтересовать только OpenSSH, для удаленного доступа, однако воспользовавшись пунктом Manual package selection опытный пользователь может сразу установить необходимые ему пакеты.

NAT-DHCP-Squid-001.jpg

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

NAT-DHCP-Squid-002.jpg

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

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

NAT-DHCP-Squid-003.jpg

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

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

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

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

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

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

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

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

NAT-DHCP-Squid-004.jpg

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

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

NAT-DHCP-Squid-005.PNG

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NAT-DHCP-Squid-007.jpg

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

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

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

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

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

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

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

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

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

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

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

Важное замечание! В Ubuntu 9.10 эта строка может выглядеть так, рекомендуем проверить правильность пути: error_directory /usr/share/squid/errors/ru

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

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

Так что пускай тут полежит, в моём персональном блоге. 🙂

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

В этом посте я хочу поделиться своим опытом по созданию сервера на основе роутера D-Link DIR-320. На роутере были подняты Веб-сервер, FTP, настроена видеотрансляция. Хотя статья и предполагает использование DIR-320, для другого роутера процесс настройки будет отличаться незначительно.

Аппаратное обеспечение

Роутер

Выбор прошивки

Первой прошивкой, на которую я обратил внимание, была DD-WRT. Эта прошивка порадовала качеством, стабильностью и обширным набором дополнительных пакетов — Optware. DD-WRT поддерживает множество устройств, легко устанавливается, имеет удобный веб-интерфейс, множество возможностей доступно сразу после заливки прошивки в роутер. Однако DD-WRT основана на старом ядре 2.4, что накладывает серьёзные ограничения. Например, ядро 2.4 не поддерживает модуль uvcvideo, который требовался мне для подключения камеры. Погуглив, я узнал о прошивке OpenWrt. Последний релиз OpenWrt 10.03 под кодовым именем Backfire, вышедший 8 апреля 2010 г, поддерживает ядро 2.6.32. Для этой прошивки создан набор дополнительных пакетов — X-Wrt, в котором можно найти очень много полезного портированного софта и админку WebIf. Главная особенность OpenWrt — перезаписываемая файловая система, которая монтируется поверх стандартной файловой системы, что позволяет устанавливать пакеты в роутер и выполнять конфигурирование привычным редактированием файлов. Возможно монтирование как части энергонезависимой памяти роутера, незанятой прошивкой (с использованием файловой системы JFFS2), так и внешнего носителя. Для установки пакетов используется менеджер opkg. OpenWrt вместе с дополнительными пакетами распространяется в исходниках.

Сборка прошивки

Нам понадобится любая операционная система на основе Linux. Я использовал Arch Linux.

Для получения исходников, нужно установить subversion:

$ sudo pacman - S subversion

Скачиваем Buildroot OpenWrt:

Скачиваем и устанавливаем дополнительные пакеты и патчи:

$ cd backfire
$ . /scripts/ feeds update && . /scripts/ feeds install - a

Проверяем наличие всех нужных для сборки пакетов и инициализируем конфигурацию прошивки:

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

Меню настройки

Target System -> BCM947xx / 953xx -- выбираем вариант для нашего BCM5354 с ядром 2.6

Выбирать пакеты можно как для установки в прошивку, так и просто для сборки. Пакеты, собранные без установки образуют наш мини-репозиторий, из которого их можно будет устанавливать уже после заливки прошивки в роутер. Памяти в DIR-320 всего 4 МБ, причём обязательно должно остаться немного свободного места для использования JFFS2. Так что будем устанавливать минимально необходимый набор пакетов, а остальное соберём для последующей установки на внешний носитель. Чтобы выбрать пакет для установки в прошивку, нужно нажать Y. Я добавил в прошивку пакеты, требуемые для монтирования флешки:

Kernel Modules -> USB Support -> core , usb2 , ohci -- для поддержки контроллеров USB 2.0
Kernel Modules -> USB Support -> storage -- для поддержки USB -накопителей
Kernel Modules -> Filesystems -> ext3 -- выбираем нужные файловые системы
Base System -> block - mount -- для монтирования через fstab
Utilities -> disc -> block - extroot -- для монтирования поверх файловой системы
Utilities -> Editors -> nano -- удобный текстовый редактор для конфигурирования системы

Также, добавил веб-админку. Без админки не удастся установить пароль для входа по ssh:

Administration -> webif -> webif , webif - applications -- веб-админка

Затем, выбираем пакеты для сборки без установки. Не стоит выбирать много лишних пакетов, чтобы время сборки не увеличивалось до неразумных пределов. Чтобы выбрать пакет для сборки без установки, нужно нажать M. Многие пакеты можно установить и из основного репозитория, однако нужные модули ядра стоит собрать, т.к. в репозитории могут быть несовместимые версии. Я выбрал модули ядра, необходимые для подключения UVC-камеры — kmod-video-core и kmod-video-uvc.

Также можно настроить некоторые параметры прошивки, например сетевой адрес по умолчанию. Я установил адрес 192.168.0.1 (адрес роутера по умолчанию — 192.168.1.1):

Image Configuration -> LAN IP Address -> 192.168.0.1

При необходимости, можно сконфигурировать ядро. Я оставил всё по умолчанию.

В процессе сборки прошивки также будут скачиваться и собираться необходимые инструменты для кросс-компиляции, скачиваться исходники ядра, пакетов и т.д. Сборка займёт от 30 минут до нескольких часов, в зависимости от производительности сети и компьютера. После завершения сборки, в папке bin будут находиться созданные образы прошивки в различном формате и собранные пакеты. Нам понадобится образ прошивки в формате squashfs — openwrt-brcm47xx-squashfs.trx.

Заливка прошивки

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

После завершения прошивки, настраиваем сетевой интерфейс компа на получения адреса с помощью DHCP, перезагружаем роутер. OpenWrt загружается несколько дольше оригинальной прошивки, причём диагностический светодиод светится во время загрузки и гаснет при завершении. Если всё прошло успешно, заходим браузером на роутер. На этом этапе не обязательно настраивать роутер — после подключения внешнего накопителя, настройки будут храниться на нём и придётся заново настраивать. Достаточно лишь установить пароль.

Подготовка накопителя

Disk / dev / sdb : 2004 MB , 2004877312 bytes
62 heads , 62 sectors / track , 1018 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes
Disk identifier : 0xa8afe1b3

Device Boot Start End Blocks Id System
/ dev / sdb1 1 255 488281 + 83 Linux
/ dev / sdb2 255 992 1416015 + 83 Linux
/ dev / sdb3 992 1019 52567 82 Linux swap / Solaris

$ mkfs . ext3 / dev / sdb1
$ mkfs . ext3 / dev / sdb2
$ mkswap / dev / sdb3

Настройка прошивки для загрузки с внешнего накопителя

Заходим на роутер SSH-клиентом, используя логин root и пароль, установленный через веб-админку. Редактируем файл /etc/config/fstab.

$ nano / etc / config / fstab

Редактируем одну секцию «mount» для монтирования раздела накопителя поверх основной файловой системы. Для монтирования других разделов, будет использоваться файл fstab, хранящийся на внешнем накопителе:

config mount
option target /
option fstype ext3
option enabled_fsck 0
option device / dev / sda1
option options rw , sync
option is_rootfs 1
option enabled 1

Перезагружаем роутер, заходим в веб-админку. Если всё прошло успешно, админка должна снова попросить установить пароль — устройство успешно смонтировалось и настройки теперь хранятся на нём.

Настройка прошивки

Меню настройки

Заходим на роутер SSH-клиентом, создаём точку монтирования для домашних директорий:

src / gz mypackages ftp : //(адрес сервера)/brcm47xx/packages

Обновляем список пакетов:

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

$ cd / var / opkg - lists
$ rm X - Wrt packages

Устанавливаем нужные пакеты:

$ opkg install kmod - input - core kmod - video - core kmod - video - uvc

Основное конфигурирование удобно выполнять через веб-админку. Устанавливаем имя хоста, часовой пояс, добавляем точки монтирования, настраиваем сетевые интерфейсы и т.д. Я смонтировал раздел для домашних директорий с опциями async и noatime, чтобы продлить жизнь флешке. Перезагружаем роутер и проверяем результат:

$ df - h
Filesystem Size Used Available Use % Mounted on
/ dev / root 2.0M 2.0M 0 100 % /rom
tmpfs 14.5M 72.0K 14.5M 0% / tmp
tmpfs 512.0K 0 512.0K 0 % /dev
/ dev / sda1 461.8M 19.8M 418.1M 5 % /overlay
mini_fo:/ overlay 2.0M 2.0M 0 100 % /
/ dev / sda2 1.3G 558.4M 733.6M 43 % /home

Устанавливаем FTP-сервер

Создадим группу админов сервера:

$ echo web : x : 101 : >> /etc/ group

Создадим пользователя ftp для анонимного входа, добавим его в группу nogroup (65534), и пользователя ftpadmin для администрирования файлов, доступных по FTP.

$ echo ftpadmin :*: 102 : 101 : ftpadmin : /home/ srv / ftp : /bin/ ash >> /etc/ passwd
$ echo ftp :*: 103 : 65534 : ftp : /home/ srv / ftp : /bin/ ash >> /etc/ passwd
$ mkdir - p / home / srv / ftp
$ chgrp - R web / home / srv
$ chown ftpadmin / home / srv / ftp

Зададим пароль для пользователя ftpadmin

Установим pure-ftpd — быстрый и лёгкий FTP-сервер

$ opkg update
$ opkg install pure - ftpd

Настройки сервера находятся в файле /etc/config/pure-ftpd. Разрешим анонимный вход и выберем отдельный лог отредактировав следующие строки:

option noanonymous '0'
option anonymouscantupload '1'
option syslogfacility 'none'
option altlog 'stats:/var/log/pureftpd.log'
option enabled '1'

Также удалим опцию peruserlmits, чтобы убрать ограничения на количество входов пользователей.

$ / etc / init . d / pure - ftpd start

Зайдём в веб-админку на вкладку Services и отметим pure-ftpd для автоматического запуска. Чтобы сервер был доступен из интернета, нужно зайти на вкладку Firewall и открыть 21 порт.

Устанавливаем веб-сервер

Создадим домашнюю директорию для файлов и пользователя, который будет владеть этой директорией:

$ echo wwwadmin :*: 101 : 101 : wwwadmin : /home/ srv / www : /bin/ ash >> /etc/ passwd
$ mkdir / home / srv / www
$ chgrp web / home / srv / www
$ chown wwwadmin / home / srv / www

Зададим пароль для пользователя wwwadmin:

$ opkg install libsqlite3 php5 - cgi php5 - mod - pdo php5 - mod - sqlite php5 - mod - gd php5 - mod - session

Подключим нужные нам плагины:

server . modules = (
"mod_cgi" ,
"mod_access" ,
"mod_redirect"
)

Установим директорию для документов:

server . document - root = "/home/srv/www"

Зададим имена документов по-умолчанию:

index - file . names = ( "index.htm" , "index.php" )

Укажем CGI-обработчик для PHP:

cgi . assign = ( ".php" => "/usr/bin/php-cgi" )

Желательно указать UID и GID для сервера, чтобы он не работал с правами суперпользователя:

server . username = "wwwadmin"
server . groupname = "web"

Настроим PHP, отредактировав файл /etc/php.ini. Подключим нужные модули, раскоментировав соответствующие строки:

extension = pdo . so
extension = gd . so
extension = session . so
extension = sqlite . so

Изменим параметр doc_root на пустую строку, иначе интерпретатор будет искать скрипты не в том месте:

Чтобы сервер заработал, нужно сначала перевесить веб-админку роутера с 80 порта на какой-нибудь другой порт. Запустим сервер:

Создадим в /home/srv/www файл test.php с таким содержимым:

Откроем 192.168.0.1/test.php. Если всё прошло удачно, увидим таблицу с настройками PHP:

Настраиваем видеотрансляцию

Вебка

Для начала, нужно установить нужные для камеры модули и убедиться, что камера успешно подхвачена системой:

$ ls / dev / video *
/dev/ video0

Для видеотрансляции будем использовать пакет MJPEG-Streamer. Это довольно тяжелый пакет, но его можно немного твикнуть.

/openwrt/ backfire
$ make package / mjpg - streamer / clean
$ make package / mjpg - streamer / prepare

Поправим код для сжатия в JPEG. Путь может немного отличаться для разных версий пакета и библиотек:

$ nano build_dir / target - mipsel_uClibc - 0.9.30.1 / mjpg - streamer - r94 / plugins / input_uvc / jpeg_utils . c

Найдём в коде строку инициализации параметров сжатия:

После этой строки можно переопределить некоторые параметры сжатия JPEG. Выберем быстрый целочисленный метод для DCT:

cinfo . dct_method = JDCT_IFAST ;

Сохраним изменения, скомпилируем пакет, обновим индекс пакетов:

$ make package / mjpg - streamer / compile V = 99
$ make package / index

Подключимся к роутеру по SSH. Включим наш репозиторий в /etc/opkg.conf. Установим MJPEG-Streamer:

$ opkg update
$ opkg install mjpg - streamer

Настройки пакета находятся в файле /etc/config/mjpg-streamer. Отредактируем нужные строки:

config mjpg - streamer core
option device "/dev/video0"
option resolution "640x480"
option fps "1"
option port "310"
option enabled "true"

Если камера отдаёт поток в формате MJPG, на этом настройка закончена. Моя камера отдаёт несжатый поток в формате YUV, для неё нужно включить JPEG-сжатие. Отредактируем файл /etc/init.d/mjpg-streamer. Найдём командную строку запуска демона:

$PROG -- -- input "input_uvc.so --device $device --fps $fps --resolution $resolution" -- output "output_http.so --port $port" &

$PROG -- -- input "input_uvc.so --device $device --fps $fps --resolution $resolution --yuv" -- output "output_http.so --port $port" &

$ / etc / init . d / mjpg - streamer start

Если всё прошло нормально, должен включиться светодиод на камере. Для проверки работы сервера зайдём на 192.168.0.1:310/?action=stream. Не все браузеры нормально поддерживают MJPG-поток. Статическая картинка доступна по адресу 192.168.0.1:310/?action=snapshot. Для отображения видео на веб-странице можно использовать встроенную поддержку браузера (имеется в Firefox, Chrome, частично в Opera), Javascript или Java-апплет. Страничка с примерами есть дистрибутиве MJPEG-Streamer.

Индикация посетителей

Платка

P.S. На всякий случай

Я новичок в мире Linux, к тому же, в первый раз пишу такой большой пост, так что могут быть ошибки. Если так, то они сделаны не из вредности.

Вскрытие и перепрошивка роутера лишают тебя гарантии на девайс. Возможны и другие проблемы. Впрочем новые роутеры (например, DIR-320) сложно убить перепрошивкой — загрузчик зашит в энергонезависимую память микроконтроллера (в отличии, например, от RedBoot, использовавшегося в более ранних моделях), так что в любой момент можно сделать откат на оригинальную прошивку. Но в любом случае, ты ковыряешь роутер на свой страх и риск.

Favorite

Добавить в избранное

Главное меню » Linux » Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов

Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов

Н астройка Linux GW или маршрутизатора не так сложна, как может показаться, если вы читаете достаточно дружественное руководство. Это дополнение к обычной «настройке руководства по Linux»: сначала мы сделаем это с помощью Virtualbox, чтобы проверить свои настройки перед тем, как их развернуть.

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

Мы можем купить маршрутизатор или заменить устройство на что-то, что может обеспечить такую ​​же функциональность. В этом случае мы выбрали сервер Linux, поэтому нам нужно выяснить, какие сервисы предоставляет маршрутизатор, а затем каким-то образом эмулировать их:

  • DHCP для управления арендой
  • DNS для перевода доменов в IP
  • NAT, чтобы мультиплексировать одно соединение
  • Переадресация сервиса, выставление внутренних сервисов во внешнюю сеть

К счастью, Linux поддерживает все это:

  • ISC для DHCP
  • bind9 для DNS
  • iptables для NAT
  • снова iptables, для пересылки услуг

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

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

Перед настройкой каких-либо служб вам понадобятся две вещи: две сетевые карты, одна для исходящего соединения, а другая для (коммутируемой) локальной сети, и способ сообщить серверу, что вы хотите, чтобы весь трафик из сети 1 был перенаправлен в сеть 2. Возможно, вы захотите установить более двух карт на случай, если вам потребуется маршрутизировать несколько локальных сетей. Мы увидим это позже.

Вам также понадобится ОС. Мы выбрали Ubuntu, потому что она очень проста в установке и содержит все необходимое программное обеспечение в репозиториях, но вы можете использовать любой другой дистрибутив, если вам это нужно.

Кроме того, в этой статье мы будем использовать такую ​​настройку:

  • WAN доступ через eth0, адрес DHCP
  • LAN маршрутизация в eth1, сеть 192.168.25.1/24

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

  1. Начните с создания того, что будет вашим маршрутизатором VM.
  2. Включите первый сетевой адаптер. Этот должен видеть ваш физический маршрутизатор (т.е. подключаться к глобальной сети).
  3. Включите второй сетевой адаптер. Используйте опцию «Внутренняя сеть» в поле «Прикреплено к». Это будет ваш интерфейс локальной сети.
  4. Создайте вторую виртуальную машину. Этот будет вашим клиентом.
  5. Включите один сетевой адаптер, также подключенный к внутренней сети. Имя этой сети должно совпадать с именем другой виртуальной машины.

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

Настройка Linux GW: NATting и пересылка

Для нашего Linux GW такие сервисы, как DNS и DHCP, хороши, но реальное подключение намного важнее. Давайте настроим функции NAT и переадресации соединений нового маршрутизатора, затем мы можем проверить, правильно ли работает наша установка, пропингуя IP одной локальной сети из другой.

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

Нам также нужно будет настроить IP для eth0, так как не будет DHCP-сервера (мы являемся сервером!). Откройте/etc/network/interfaces и добавьте что-то вроде этого:

После того, как все проверено, перезапустите сетевые сервисы, как ниже:

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

На своем клиентском ПК установите свой IP-адрес:

Проверьте, установлен ли у вас IP:

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

Обратите внимание, что вам может потребоваться обновить все (т.е. перезапустить сеть и вручную назначить свой IP-адрес) после подключения кабеля.

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

Читать Как измерить и показать прогресс копирования rsync в Linux?

Это должно дать вам ошибку. Конечно, поскольку нет DHCP, маршрут не установлен. Давайте вручную установим маршрут в клиенте:

Сохранение правил пересылки

Чтобы правила пересылки сохранялись после перезагрузки, нам нужно сначала изменить /etc/sysctl.conf, чтобы разрешить пересылку IP. Это просто вопрос раскомментирования этой строки:

У нас также будет много правил iptables, которые нам нужно настроить во время загрузки. Мы создали скрипт в /home/router/set_forwarding.sh, который также связали с /etc/init.d/rc.local, поэтому он запускается всякий раз, когда загружается система.

В следующий раз мы перейдем к чему-то более сложному: установке DNS-сервера и использованию доменов вместо IP-адресов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


Не знаю насколько это была хорошая идея, но мне срочно понадобился роутер, а под рукой был только старый компьютер. Покупать новый.. 2000 рублей не лишние, "высиживать AVITO" чтобы c 50% вероятностью купить глючное устройство, зато "задёшево" - тоже как-то не очень.

А компьютер не потянет ничего лучше XP и значит светит ему дальняя дорога.. Подумал-подумал.. попробую. Некоторое время потребовалось чтобы компьютер перебрать, уж что-что, а это я умею - выкинуть 2 плашки памяти (осталась Kingston 512Mb DDR PC3200), туда же жесткий диск IDE 80Gb, заменить CR2032 батарейку BIOS, заменить термопасту на процессоре (Barton 2600+), промыть и переставить вентиляторы в потребные места корпуса. Покопавшись в заначке ("..ничего не выбрасывать. "), нашел 3 PCI сетевые карты на 100Mbit - 3Com 905C, VIA, IC+ IP100A. Последняя оказалась нерабочей и благополучно ушла в мусорку. Со встроенным Reatek'ом всего получилось 3 сетевых интерфейса.

Выбор дистрибутива

Про славные роутеры на линуксе наслышан еще с 2004 года, но вот трогать руками не доводилось. Яндекс в помощь, сначала меня заинтересовал проект Untangle - все так красиво и заманчиво. Дистрибутив 500Mb - мощно! Долго-предолго искал болванку, она оказалась последней. Очень аккуратно чтобы не запороть записал ISO. Системные требования подходящие: We recommend at least a Pentium 4 Processor (or a similar AMD processor), 80 GB hard drive, 2 network cards, and 1 GB of memory. Думаю, если памяти ну совсем будет мало, тогда найду еще планку. На всякий случай посмотрел "дополнительные железные требования" - нет, все в порядке, незачем волноваться, вот говорят сотрут все данные на диске - это нормально. Установщик радостно сказал, что CPU - Ok! RAM - Ok! и начал копировать файлы. Минут через 30 копирование завершилось и пошла перезагрузка, в самом конце которой, увидел надпись - ..процессоры без SSE2 не поддерживаются.. - дословно и кнопка Okey. Вот такие люди мне нравятся больше всего - просто красавцы 🙂 Болванка ушла в мусорку.

IPCop

Следующий проект IPCop - сначала меня он не сильно вдохновил, весит дистрибутив всего 60Mb, хотя последнее 2.1.9 обновление 2015 года, но на него нет дистрибутива. Скачал ISO 2.1.8, записал на флешку, установщик начал устанавливать, потом проверил оборудование, не нашел CD-ROM и на этом все. Тут я еще раз с благодарностью вспомнил Untangle, которые съели мою последнюю болванку. Решение нашлось быстро:

Скачал утилиту, сделал все как сказано - не записывает. Как побороть, описано там же - убить Explorer. Записал, начал инсталляцию и вот, что хочу сказать - IPCop вещь. Все сетевухи распознались правильно, для каждой из них выбирается цвет, где RED - сетевая, смотрящая в интернет, а GREEN - в локальную сеть (остальные настраиваются произвольно). После установки и перезагрузки можно локально зайти как root, набрать setup и перенастроить все параметры, help выдает много команд, это радует.

В "веб-морду" можно попасть только с удаленного узла, набрав https://IP:8443, где IP - адрес "зеленого" интерфейса, ну и присоединиться шнуром нужно понятное дело тоже к нему. Все здесь есть, все красиво - загляденье, сразу автоматом определилось обновление 2.1.9 и предложило себя установить. Установка прошла моментально - замечательно. Есть необходимый мне проброс портов:

Linux Router

При включении, выключении и при настройке интерфейсов, роутер выдает прикольные звуки а-ля Dendy.

Если решение будет работать стабильно, то ничего другого и не нужно.

Добавление от 01.05.2016
  • Качаем дистрибутив, устанавливаем;
  • Заходим в Web-интерефейс роутера, VPNs->OpenVPN, нажимаем Advanced options, в разделе Push Routes отмечаем чекбокс Geen Network, сохраняем настройки;

Linux Router

  • Запускаем OpenVPN Server. Все настройки можно оставить по умолчанию. Я поменял протокол на TCP и поставил шифрование AES-256;

Linux Router

  • Создаем подключение, нажимаем Add, далее Host-to-Net -> Add, вбиваем Name, User's Full Name и PKCS12 File Password;

Linux Router

Linux Router

  • Распаковываем, кладем в папку Config программы OpenVPN;

Linux Router

  • Запускаем OpenVPN, появится значок программы в трее, правый клик -> Подключиться, вводим пароль, пройдет процесс подключения, после успешного подключения значок станет зеленым;

Linux Router

  • Теперь маршрут в удаленную локальную сеть доступен напрямую, проверяем - пингуем, запускаем RDP-сессии.
Добавление от 06.05.2016

Окончательный вывод: IPCop - очень полезное решение. Старых компьютеров всегда хватает, в том числе старых серверов - два таких сервера и соединение офисов VPN туннелями для небольшой компании готово, а также VPN сервер для удаленных сотрудников. Без вложения средств, с минимальной настройкой, стабильная работа.

Добавление от 05.08.2016

В рекомендациях OpenVPN сказано, что основным является протокол UDP, а TCP нужно использовать только в случае проблем с UDP. Я настроил изначально на TCP и никаких недочетов не заметил - все работает. Возможно на медленном канале TCP не прокатит, но на моем быстром никаких нареканий.

PfSense

PfSense аналогичен по назначению IPCop, но обладает расширенными возможностями, главными из которых являются:

Соответственно IPCop - для простых решений, где не нужны навороты и дополнительные требования, к примеру - доступ к отдельностоящему, удалённому серверу. Причём, если этот удалённый сервер - сервер виртуализации, то IPCop можно реализовать как виртуальную машину (VM) на этом сервере. На Hyper-V как VM 1 поколения с Legacy LAN-адаптерами.

PfSence - для среднего офиса, где есть AD и необходимость, допустим, ограничить доступ сотрудников к социальным сетям. Это и файрвол, это прокси-сервер, это шейпинг трафика, это работа с LDAP.

Системные требования примерно такие же как у IPCop:

  • CPU минимальный/рекомендуемый - 500Mhz/ 1Ghz;
  • RAM минимум/рекомендовано - 256Mb/ 1Gb;
  • HDD - 1Gb;
  • CD-ROM или USB-порт.

Если потребуется использовать шейпинг трафика, то железо нужно брать с запасом, так как нагрузка на него прилично возрастёт.

Читайте также: