Делаем из старого компьютера маршрутизатор
Лежала как-то небольшая гора металла, из которой удалось собрать:
* Intel Celeron E3300 — двухядерный бомжовский селерон под 775 платформу
* ASUS P5KPL-AM EPU — материнка под 775 платформу с ddr2 памятью (что плохо) и гигабитным ethernet портом (что хорошо)
* DDR2 плашка на 1 gb оперативки
* Пару жестких дисков на 320 гигов каждый
* БП насколько-то, на сколько не помню (работает же)
Первая попытка — установить туда windows server 2012 в целях «попробовать» и учебной практики (ключик MS дали сами, типа для студентов).
В итоге: с 1 активным пользователем (локальным администратором) использовано 600-700мб из 1000 всего. Не кайф. Где-то в течении месяца на данном ПК висел просто FTP сервер (filezilla server — отлично работает по ssl и мне показалось что намного проще настраивается, чем дефолтный).
Что интересно: сначала я ради интересна оставил открытым без пароля на запись. сразу (в течении полудня) положили туда Photo.scr, который быстро гуглится, это было забавно и я доступ на запись закрыл. остались попытки с access denied =)
Но мне это надоело, захотелось что-то новенького.
Все это время роутером (маршрутизатором) между моей локальной сетью и внешним миром (внешний адрес) стоял ASUS RT-N65U.
Схема сети — в принципе обычная для обычного нормального человека.
Рассказ будет без бешеных врезок для ctrl-c ctrl-v, а наоборот с объяснением каждого момента!
Непосредственно рассказ
И тут мне пришла в голову идея: а что если взять этот компьютер, вставить туда вторую сетевую карту, сделать его маршрутизатором (то бишь роутером) и поставить вместо asus’овского роутера?
Тут же началось гугление про это, из которого было ясно: люди делают все и данная мысль вполне осуществима.
Решено было делать это на базе Ubuntu Server, так как монитор у этого ПК не предполагается и GUI, соответственно, не нужно. Зашел на официальный сайт, скачал образ х64 последней (на тот момент) 16.04 убунты, записал на флешку с ultraiso — втыкаю — не загружается =\ , записал еще раз — тоже самое. Перепробовано 3 метода и 2 образа — не работает, почему было уже лень разбираться. Достал DVD-RW диск (оттуда же откуда и детали) и записал на него. Загрузилось.
В процессе установки ставлю имя ПК HiroXServer, а имя пользователя mark.
По окончании установки и логина в учетку у меня открывается bash
Теперь с этого момента схема моей сети выглядит так:
Теперь все задачи по маршрутизации трафика должен выполнять тот самый сервер-пк, через который гоняется весь трафик, а asus’овский аппарат просто служит wifi точкой доступа и на этом его задачи теперь заканчиваются.
Итак, вернемся к тому, что есть: сервер-пк, к которому подключены 2 провода — один к провайдеру, второй к коммутатору asus (то что было роутером), отсутствие интернета на всем, в том числе и на сервер-пк. =)
Первым дело я хочу настроить сетевые интерфейсы, их 3:
* lo — loopback — так называемое кольцо, 127.0.0.1, localhost, итд, которое используют некоторые сервисы
* enp3s0 — так у меня называется интерфейс (сетевая карта), что смотрит в сторону провайдера.
* enp1s0 — так у меня называется интерфейс, что смотрит в локальную сеть.
Мой провайдер идентифицирует пользователей по MAC-адресу, а затем выдает мне внешний адрес по DHCP, значит мне нужно выставить mac-адрес.
Конфигурационный файл лежит тут: /etc/network/interfaces
Открываю его nano /etc/network/interfaces.
# (тут комментарий) кольцевой интерфейс lo
iface lo inet loopback
# интерфейс, что смотрит к провайдеру, получает настройки по dhcp на основании mac-адреса
iface enp3s0 inet dhcp
hwaddress ether AC:22:0B:XX:XX:XX
# интерфейс, что смотрит у нас в сторону локальной сети имеет статичный адрес 192.168.1.1 и маску подсети /24, то есть 255.255.255.0
iface enp1s0 inet static
CTRL+O (сохранить) -> Enter -> CTRL+X (выходим из редактора)
Интерфейсы настроены, для применения настроек нужно перезагрузить сеть одним из способов:
* перезагрузить компьютер sudo reboot
* перезагрузить саму сеть sudo /etc/init.d/networking restart
Далее запускаем пинг до Google DNS, дабы проверить, что у нас все работает:
Отлично! Значит все сделали правильно. Далее нужно сделать так, чтобы пакеты из локальной сети попадали в интернет.
Когда мы работаем из-под root’а, то есть у нас root@HiroXServer:~# , то дописывать sudo перед каждой командой не нужно, но если мы работает из под обычного пользователя, например mark@HiroXServer:~$ , то нужно, иначе система не даст изменять системные файлы. root — аналог администратора в windows. чтобы зайти в консоль из-под root нужно ввести sudo -i (и ввести пароль)
Первое, что мы делаем — разрешаем пересылку пакетов. Для этого нужно поставить 1 в файл /proc/sys/net/ipv4/ip_forward вручную через nano или такой командой (предварительно зайдя под root через sudo -i ):
echo 1 > /proc/sys/net/ipv4/ip_forward
Второе, что мы делаем: SNAT (Source NAT) или MASQUERADE из локальной сети в интернет. При этом адрес отправителя (например 192.168.1.2) заменяется на внешний адрес сервер-пк, из-за чего он правильно доходит к нам обратно.
sudo iptables -t nat -A POSTROUTING -o enp3s0 -s 192.168.1.0/24 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o enp3s0 -s 192.168.1.0/24 -j SNAT —to-source 228.228.228.228 (вместо этого само собой пишем статичный внешний адрес, а если адрес не статичный чтобы его каждый раз не выставлять лучше используем MASQUERADE)
Разберем как это работает:
iptables — инструмент для настройки брандмауэра netfilter в linux
-t или аналог —table — таблица, с которой я хочу работать. Их всего 3: основная filter, nat и mangle.
-A или аналог —append — добавить действие вниз в цепочку. Можно еще -I (insert), но тут роли не играет.
POSTROUTING — цепочка в таблице nat, через которую проходят все пакеты, после маршрутизации. В таблице nat есть еще PREROUTING, INPUT, OUTPUT.
-o — тут указывает из какого интерфейса пакет выходит
-s — указываем из какой сети (!) пакет пришел
-j — указываем действие, которое с этим пакетом нужно совершить
Подробнее об iptables, netfilter и их возможностях можно почитать здесь и здесь.
Далее я рекомендую удалить сразу ubuntu брандмауэр ufw, так как он возможно будет мешать:
sudo apt remove ufw -y
Для того, чтобы убедиться, что у нас все получилось пишем:
sudo iptables -t nat -L
В принципе базовая функция маршрутизатора у нас теперь работает работает, но для того чтобы это ощутить с основого пк в моей схеме нужно: настроить asus’овский агрегат в режим коммутатора и выставить ему статический ip, а затем выставить на каждом пк статичный ip. например на настольном ПК у меня будет IP 192.168.1.105.
Первое делается от модели к модели роутеров по разному, в общем нужно заменить режим с «беспроводной маршрутизатор» на «беспроводная точка доступа». В некоторых роутерах эта опция называется «Enable NAT» — ее нужно выключить. Также выставить для роутера статичный IP 192.168.1.2 (в моем случае), маску подсети 255.255.255.0 и основной шлюз 192.168.1.1
Второе — на основном пк идем панель управления -> Центр управления сетями и общим доступом -> Изменение параметров адаптера -> ПКМ по нашему Wifi соединению, свойства -> Протокол Интернета версии 4 , свойства и тут вписываем:
* Маска подсети = 255.255.255.0 (у меня автоматически вставилась)
* Основной шлюз = 192.168.1.1 (адрес сервер-пк)
* Предпочитаемый DNS-сервер = 8.8.8.8
Вуаля и интернет на основном пк опять вернулся. Можно закончить статью
но ведь долго же на каждом устройстве вводить статичный IP адрес теперь! И на каждом телефоне придется! Неудобно!
Для этого нужно настроить DHCP-сервер. Эта служба отвечает за автоматическое присвоение адресов внутри сети на основе рандома или какого-либо правила в конфиге.
Этой службой у нас будет выступать dnsmasq (он же DNS сервер). Попробуйте ввести
Будет ли в ответ что-то типа: «Dnsmasq version 2.76 Copyright (c) 2000-2016 Simon Kelley»?
Если нет, то устанавливаем
sudo apt install dnsmasq -y
и проверяем знакомой командой.
Конфигурационный файл dnsmasq лежит /etc/dnsmasq.conf
Откроем его через nano и заполняем:
# диапазон выдаваемых сервером адресов и время аренды.
# в данном случае у нас зарезервирован 1.2 под asus коммутатор и 54 последних адреса под vpn клиентов и другой живности
dhcp-range=192.168.1.3,192.168.1.200,24h
# так же не забываем указать статичную привязку для себя любимого
dhcp-host=60:A4:4C:XX:XX:XX,Mark-PC,192.168.1.105
# не слушаем интерфейс провайдера enp3s0
no-dhcp-interface=enp3s0
# указываем что он у нас один единственный в сети dhcp сервер
# указываем файл, где будет написано кому выдан какой ip адрес
dhcp-leasefile=/var/log/dnsmasq.leases
# указываем маску подсети нашей
dhcp-option=2,255.255.255.0
# указываем основной шлюз
# указываем присваиваемый DNS
CTRL+O (сохранить) -> Enter -> CTRL+X (выходим из редактора)
С полным списком возможных параметров можно ознакомиться здесь.
sudo /etc/init.d/dnsmasq restart
Убираем из настроек винды на основном пк статическую привязку, переподключаемся и проверяем что у нас тот же адрес. При этом остальные устройства в сети получат случайный адрес из диапазона 192.168.1.3~192.168.1.200 автоматически!
Получился нереально длинный пост. Если тема интересная и зайдет, то продолжу в примерно таком же виде, расскажу как организовать PPTP VPN, OpenVPN сервера, сделать проброс портов, а так же установку dns и прокси-сервера squid с фильтрацией неугодной рекламы во всей нашей сети!
Спасибо тем, кто дочитал пост до конца.
Выслушаю любую критику и предложения.
Не претендую на лучший мануал, ибо где-то что-то мог упустить или подзабыть в процессе написания. Тег «МОЁ», так как моё =)
Мощный домашний маршрутизатор своими руками
Xakep #289. Взлом в воздухе
Хотя в интернет-магазинах есть любое сетевое оборудование, но всё равно найдутся любители сделать всё по-своему. Например, инженер Ник Пегг был очень недоволен ограничениями классического домашнего маршрутизатора WRT54GL с 4 МБ флэш-памяти и слабым ЦПУ. В то же время, будучи весьма стеснённым в средствах, он не мог позволить себе профессиональный маршрутизатор.
Выход нашёлся: собрать устройство своими руками из компьютерных комплектующих, которые найдутся в шкафу или б/у в интернете.
Нужно было нечто дешёвое, с низким энергопотреблением и несколькими сетевыми адаптерами.
Свой выбор Ник остановил на материнской плате Mini-ITX, которая идеально подходит для такой задачи. В его случае достаточно было платы с двумя сетевыми разъёмами, но несложно достать такую же плату с большим количеством NIC.
Для беспроводной связи инженер взял адаптер Intel 7260-ac Mini-PCIe, хотя позже сам понял ошибочность такого решения. Из-за специфичной прошивки и драйвера под Linux карта упорно отказывалась работать в диапазоне 5 ГГц.
Задним умом он понял, что лучше использовать карту на чипсете Atheros и с нормальным драйвером. В любом случае, предварительно следует обязательно проверить в интернете, что другим хакерам успешно удалось решить проблему и накатить прошивку OpenWRT.
Так или иначе, инструкция Ника Пегга по сетевой настройке и конфигурации оборудования будет очень полезна при попытке реализовать подобный проект.