Всем привет! Первый пост и прошу сильно не пинать за возможные косяки)
Предыстория
Лежала как-то небольшая гора металла, из которой удалось собрать:
* 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 с фильтрацией неугодной рекламы во всей нашей сети!
Спасибо тем, кто дочитал пост до конца.
Выслушаю любую критику и предложения.
Не претендую на лучший мануал, ибо где-то что-то мог упустить или подзабыть в процессе написания. Тег "МОЁ", так как моё =)