199

Делаем из старого компьютера маршрутизатор1

Всем привет! Первый пост и прошу сильно не пинать за возможные косяки)



Предыстория

Лежала как-то небольшая гора металла, из которой удалось собрать:

* 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

auto lo

iface lo inet loopback


# интерфейс, что смотрит к провайдеру, получает настройки по dhcp на основании mac-адреса

auto enp3s0

iface enp3s0 inet dhcp

hwaddress ether AC:22:0B:XX:XX:XX


# интерфейс, что смотрит у нас в сторону локальной сети имеет статичный адрес 192.168.1.1 и маску подсети /24, то есть 255.255.255.0

auto enp1s0

iface enp1s0 inet static

address 192.168.1.1

mask 255.255.255.0


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 , свойства и тут вписываем:

* IP-адрес = 192.168.1.105

* Маска подсети = 255.255.255.0 (у меня автоматически вставилась)

* Основной шлюз = 192.168.1.1 (адрес сервер-пк)


* Предпочитаемый DNS-сервер = 8.8.8.8


ОК -> ОК


Вуаля и интернет на основном пк опять вернулся. Можно закончить статью

но ведь долго же на каждом устройстве вводить статичный IP адрес теперь! И на каждом телефоне придется! Неудобно!


Для этого нужно настроить DHCP-сервер. Эта служба отвечает за автоматическое присвоение адресов внутри сети на основе рандома или какого-либо правила в конфиге.

Этой службой у нас будет выступать dnsmasq (он же DNS сервер). Попробуйте ввести

dnsmasq -v

Будет ли в ответ что-то типа: "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 сервер

dhcp-authoritative


# указываем файл, где будет написано кому выдан какой ip адрес

dhcp-leasefile=/var/log/dnsmasq.leases


# указываем маску подсети нашей

dhcp-option=2,255.255.255.0


# указываем основной шлюз

dhcp-option=3,192.168.1.1


# указываем присваиваемый DNS

dhcp-option=6,8.8.8.8


CTRL+O (сохранить) -> Enter -> CTRL+X (выходим из редактора)


С полным списком возможных параметров можно ознакомиться здесь.


Перезагружаем dnsmasq:

sudo /etc/init.d/dnsmasq restart


Результат должен быть "ОК"


Убираем из настроек винды на основном пк статическую привязку, переподключаемся и проверяем что у нас тот же адрес. При этом остальные устройства в сети получат случайный адрес из диапазона 192.168.1.3~192.168.1.200 автоматически!


Концовка


Получился нереально длинный пост. Если тема интересная и зайдет, то продолжу в примерно таком же виде, расскажу как организовать PPTP VPN, OpenVPN сервера, сделать проброс портов, а так же установку dns и прокси-сервера squid с фильтрацией неугодной рекламы во всей нашей сети!


Спасибо тем, кто дочитал пост до конца.


Выслушаю любую критику и предложения.

Не претендую на лучший мануал, ибо где-то что-то мог упустить или подзабыть в процессе написания. Тег "МОЁ", так как моё =)

10
Автор поста оценил этот комментарий

Я примерно такой же фигней страдал, когда мне было приказано порезать подсети, чтобы ничто и никто не ходило из одной подсети в другую. Так как денег дали тыщу рублей, а живу я Нижнепердянске и у нас тут только поля заросшие,  я выкрутился так:
Я взял старый системник, воткнул пять сетевух, установил pfsense, и настроил правила фильтров так, чтобы из подсети в подсеть нельзя было ходить. Закрыл все входящие по wan, закрыл ipv6, ну и вообще все что можно закрыл.
На разъем кнопки включения повесил кондюк. Т.е. когда питание здания вырубалось, а потом врубалось, комп за счет кондюка включался автоматически. (Мой авторский лайфхак). (Комп старый, автостарт в биосе не настраивался).
В дальнейшем планировалось все это переделать в распберри пай с четырьмя usb-сетевухами. Было бы не очень быстро, но у нас и интернет был 1Мбит.) За год-два, все бы окупилось на экономии электричества. Ну и так как нет винчестера, то и надежней гораздо.)
Но не успел.

раскрыть ветку
3
Автор поста оценил этот комментарий

Делал дома примерно то же самое, только на Windows Server 2012. И еще и Active Directory настраивал. Довольно быстро мне всё это надоело, и я сделал вывод, что лучше роутер - отдельно, а файлопомойка - отдельно. Но это лично моё мнение.

раскрыть ветку
7
Автор поста оценил этот комментарий

1) к ASUS RT-N65U прекрасно цепляется любой винт, и шарится по локальной сети. Файлопомойка.
2) можно подцепить принтер
3) торренты тоже прекрасно живут
4) open vpn клиент - присутствует.
5) при желании выпендриться - можно поднять свое файлопомоечное облако

пункты 1-4 пашут на моей железке с аптаймом месяцами. 5 пока не нужен, но поднимал

кастомная прошивка от padavan: https://bitbucket.org/padavan/rt-n56u/wiki/RU/%D0%A7%D0%B0%D1%81%D1%82%D0%BE%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B

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

раскрыть ветку
2
Автор поста оценил этот комментарий
Я бы просто поставил проксю на pfsense ,но это сугубо мое мнение,ибо вебморда приятная и функционала хватает