Разное

Маршрутизатор на линуксе своими руками: Наш рецепт отказоустойчивого Linux-роутера / Блог компании Флант / Хабр

Содержание

Беспроводной машрутизатор своими руками / Хабр

  1. Выбор комплектующих
  2. Запуск сетевых интерфейсов
  3. Установка точки доступа 802.11ac (5 ГГц)
  4. Настройка виртуального SSID с помощью hostapd

Последние десять лет я покупал дешёвое сетевое оборудование и ставил на него DD-WRT, чтобы вернуть «функции» ценой более $500, удалённые из ядра Linux, на котором основаны стоковые прошивки.

Несмотря на нестабильные сборки, неисправленные ошибки и споры, DD-WRT всё равно предпочтительнее стоковых прошивок. Но сейчас достойные комплектующие дешевле, чем когда-либо, а DIY-сообщество поголовно перешло на Linux (я смотрю на вас, м-р Raspberry), так почему бы не собрать собственный беспроводной маршрутизатор раз и навсегда?

Первым делом нужно определиться с платформой: x86 или ARM? Не буду подробно обсуждать ключевые различия, но вкратце: у первой лучше производительность, а вторая дешевле и энергоэффективнее. Платы Raspberry Pi (и аналоги) чрезвычайно дёшевы и, вероятно, мощнее большинства беспроводных коммерческих маршрутизаторов, но платформы x86 широко распространены и имеют преимущество за счёт стандартизированных форм-факторов и портов расширения.

Конечно, самая важная деталь — это чипсет. Сегодня стандартами де-факто являются 802.11n (2,4 ГГц) и 802.11ac (5 ГГц), но подобрать драйверы под Linux — та ещё задачка, тем более с поддержкой режима AP (точка доступа). Короче, если не хотите проблем, то выбирайте чипсеты Atheros. Драйверы ath9k и ath20k хорошо поддерживаются, вы легко найдёте их с интерфейсами USB и/или mini-PCIe.

Хотя бы один контроллер сетевого интерфейса (NIC) — необходимый минимум, а RAM и накопитель выбирайте на свой вкус.

Список материалов

Принеся в жертву цену и энергопотребление, я выбрал x86-платформу ради модульной, относительно мощной конфигурации, доступной для апгрейда.

Если вам не нужен ARM, то и вентилятор не обязателен.

Корпус просторный, с двумя подготовленными отверстиями для штепсельной вилки AC/DC. Установка материнской платы, RAM и Pico-PSU прошла гладко:

Железячное порно

Самым сложным оказалась установка mini-PCIe WiFi, потому что плата поддерживает только карты половинного размера: здесь на помощь пришёл удлинитель mPCIe. Я взял кабель FFC на 20 см (входит в комплект) для подключения обеих сторон адаптера и закрепил mini-PCIe на шасси с помощью двустороннего скотча.

Расширитель mini-PCIe

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

Понятно, что ставим Linux. В зависимости от оборудования, это может быть оптимизированный дистрибутив вроде Raspbian (для Raspberry Pi) или любой другой дистрибутив Linux, который вам нравится. Поскольку я много лет использую Ubuntu, то выбрал Ubuntu Server 18.04 LTS, с которым мне привычнее работать и которому обеспечена долгосрочная поддержки.

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

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

$ ip -br a | awk '{print $1}'
lo
enp1s0
enp2s0
wlp5s0

На материнской плате два встроенных NIC: это enp1s0 и enp2s0. Беспроводная карта отображается как wlp5s0 и поддерживает режим AP, как и предполагалось:

$ iw list
...
Supported interface modes:
                 * managed
                 * AP
                 * AP/VLAN
                 * monitor
                 * mesh point

Теперь можем обрисовать, что нам нужно: первый NIC поставим как WAN-порт, а второй соединим с беспроводным интерфейсом:

Сеть

Если у вас Ubuntu 18.04, то немедленно избавимся от netplan, чтобы вернуться к поддержке /etc/network/interfaces:

$ sudo apt-get install ifupdown bridge-utils
$ sudo systemctl stop networkd-dispatcher
$ sudo systemctl disable networkd-dispatcher
$ sudo systemctl mask networkd-dispatcher
$ sudo apt-get purge nplan netplan.io

В качестве DHCP/DNS-сервера выберем dnsmasq:

$ sudo apt-get install dnsmasq

Так как мы будем запускать и настраивать процесс dnsmasq через хук post-up, не забудьте отключить демон при загрузке:

$ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq

Напишем предварительную конфигурацию сетевых интерфейсов в соответствии с диаграммой, включая минимальную настройку dnsmasq:

$ cat /etc/network/interfaces
# Loopback
auto lo
iface lo inet loopback
# WAN interface
auto enp1s0
iface enp1s0 inet dhcp
# Bridge (LAN)
auto br0 
iface br0 inet static
    address 192.168.1.1
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255 
    bridge_ports enp2s0
    post-up /usr/sbin/dnsmasq \
              --pid-file=/var/run/dnsmasq.$IFACE.pid \
              --dhcp-leasefile=/var/lib/misc/dnsmasq.$IFACE.leases \
              --conf-file=/dev/null \
              --interface=$IFACE --except-interface=lo \ 
              --bind-interfaces \
              --dhcp-range=192.168.1.10,192.168.1.150,24h               
    pre-down cat /var/run/dnsmasq.$IFACE.pid | xargs kill

Документация /etc/network/interfaces здесь

Как вы могли заметить по секции post-up, dnsmasq стартует, как только поднимается мост. Его настройка выполняется только аргументами командной строки (--conf-file=/dev/null), и процесс остановится при отключении интерфейса.

В поле bridge_ports специально не указан интерфейс wlp5s0, потому что hostapd добавит его к мосту автоматически (brctl может отказаться делать это, прежде чем запущен hostapd для изменения режима интерфейса).

См. документацию по dnsmasq.

Теперь можно перезапустить сеть (sudo service networking restart) или просто перезагрузиться, чтобы проверить правильность настройки конфигурации сети.

Обратите внимание: хотя мы в данный момент можем получить DHCP от enp2s0, но у нас не будет ни беспроводной связи (позже подробнее об этом), ни доступа в интернет (см. ниже).

Маршрутизация

На этом этапе нужно маршрутизировать пакеты между интерфейсами LAN (enp2s0) и WAN (enp1s0) и включить трансляцию сетевых адресов.

Включить переадресацию пакетов легко:

$ sudo sysctl -w net.ipv4.ip_forward=1
$ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

Последняя команда гарантирует, что конфигурация сохранится до следующей перезагрузки.

Трансляция сетевых адресов — другое дело, обычно придётся разбираться (или, скорее, бороться) с iptables. К счастью, каменный век давно закончился, и ребята из FireHol приложили немало усилий, добавив необходимый уровень абстракции:

$ sudo apt-get install firehol

FireHOL — это язык для защищённого файрвола с сохранением состояния, его конфигурация легко понятна и доступна. Больше не надо писать операторы iptables: конфигурационный файл сам транслируется в операторы iptables и применяется как надо. Никакого демона в фоновом режиме.

Включение трансляции сетевых адресов для интерфейсов локальной сети с добавлением минимальных правил файрвола делается элементарно:

$ cat /etc/firehol/firehol.conf 
version 6
# Accept all client traffic on WAN
interface enp1s0 wan
    client all accept
# Accept all traffic on LAN
interface br0 lan
    server all accept
    client all accept
# Route packets between LAN and WAN
router lan2wan inface br0 outface enp1s0
    masquerade
    route all accept

FireHOL написан людьми для людей, документация здесь.

Можете проверить настройки, вручную запустив firehol (sudo firehol start) и подключив ноутбук к порту LAN: теперь вы сможете выйти интернет, если подключен порт WAN.

Перед перезагрузкой не забудьте отредактировать /etc/default/firehol, чтобы разрешить запуск FireHol при загрузке:

$ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol

Не буду вдаваться в детали всего синтаксиса firehol, конфигурационный файл сам себя объясняет, рекомендую обратиться к документации в случае более сложной настройки. Если вам действительно интересно, что firehol сотворил с iptables, просто введите sudo firehol status в командной строке.

Беспроводная точка доступа

Очевидно, управлять точкой доступа будем с помощью hostapd:

$ sudo apt-get install hostapd

Ниже вы найдёте минимальный и почти не требующий пояснений файл конфигурации 802.11 n/2.4 Ghz/WPA2-AES:

$ cat /etc/hostapd/hostapd-simple.conf 
#### Interface configuration ####
interface=wlp5s0
bridge=br0
driver=nl80211
##### IEEE 802.11 related configuration #####
ssid=iCanHearYouHavingSex
hw_mode=g
channel=1
auth_algs=1
wmm_enabled=1
##### IEEE 802.11n related configuration #####
ieee80211n=1
##### WPA/IEEE 802.11i configuration #####
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=YouCantGuess

Документацию hostpad.conf см. в /usr/share/doc/hostapd/examples/hostapd.conf.

Описанную конфигурацию можно протестировать вручную:

$ sudo hostapd /etc/hostapd/hostapd-simple.conf

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

Вот ваш окончательный /etc/network/interfaces:

$ cat /etc/network/interfaces
# Loopback
auto lo
iface lo inet loopback
# WAN interface
auto enp1s0
iface enp1s0 inet dhcp
# Bridge (LAN)
auto br0 
iface br0 inet static
    address 192.168.1.1
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255 
    bridge_ports enp2s0
    post-up /usr/sbin/hostapd \
              -P /var/run/hostapd.$IFACE.pid \
              -B /etc/hostapd/hostapd-simple.conf
    post-up /usr/sbin/dnsmasq \
              --pid-file=/var/run/dnsmasq.$IFACE.pid \
              --dhcp-leasefile=/var/lib/misc/dnsmasq.$IFACE.leases \
              --conf-file=/dev/null \
              --interface=$IFACE --except-interface=lo \ 
              --bind-interfaces \
              --dhcp-range=192.168.1.10,192.168.1.150,24h               
    pre-down cat /var/run/dnsmasq.$IFACE.pid | xargs kill
    pre-down cat /var/run/hostapd.$IFACE.pid | xargs kill

Пассивное сканирование

Согласно документации Airetos AEX-QCA9880-NX, чипсет поддерживает 802.11ac, так что мы можем уйти из переполненных каналов 2,4 ГГц в райские 5 ГГц.

Посмотрим, какие частоты поддерживаются:

$ iw list
        ...
        Frequencies:
            * 2412 MHz [1] (20.0 dBm)
            * 2417 MHz [2] (20.0 dBm)
            * 2422 MHz [3] (20.0 dBm)
            * 2427 MHz [4] (20.0 dBm)
            * 2432 MHz [5] (20.0 dBm)
            * 2437 MHz [6] (20.0 dBm)
            * 2442 MHz [7] (20.0 dBm)
            * 2447 MHz [8] (20.0 dBm)
            * 2452 MHz [9] (20.0 dBm)
            * 2457 MHz [10] (20.0 dBm)
            * 2462 MHz [11] (20.0 dBm)
            * 2467 MHz [12] (disabled)
            * 2472 MHz [13] (disabled)
            * 2484 MHz [14] (disabled)
        ...
        Frequencies:
            * 5180 MHz [36] (17.0 dBm) (no IR)
            * 5200 MHz [40] (17.0 dBm) (no IR)
            * 5220 MHz [44] (17.0 dBm) (no IR)
            * 5240 MHz [48] (17.0 dBm) (no IR)
            * 5260 MHz [52] (23.0 dBm) (no IR, radar detection)
            * 5280 MHz [56] (23.0 dBm) (no IR, radar detection)
            * 5300 MHz [60] (23.0 dBm) (no IR, radar detection)
            * 5320 MHz [64] (23.0 dBm) (no IR, radar detection)
            * 5500 MHz [100] (23.0 dBm) (no IR, radar detection)
            * 5520 MHz [104] (23.0 dBm) (no IR, radar detection)
            * 5540 MHz [108] (23.0 dBm) (no IR, radar detection)
            * 5560 MHz [112] (23.0 dBm) (no IR, radar detection)
            * 5580 MHz [116] (23.0 dBm) (no IR, radar detection)
            * 5600 MHz [120] (23.0 dBm) (no IR, radar detection)
            * 5620 MHz [124] (23.0 dBm) (no IR, radar detection)
            * 5640 MHz [128] (23.0 dBm) (no IR, radar detection)
            * 5660 MHz [132] (23.0 dBm) (no IR, radar detection)
            * 5680 MHz [136] (23.0 dBm) (no IR, radar detection)
            * 5700 MHz [140] (23.0 dBm) (no IR, radar detection)
            * 5720 MHz [144] (23.0 dBm) (no IR, radar detection)
            * 5745 MHz [149] (30.0 dBm) (no IR)
            * 5765 MHz [153] (30.0 dBm) (no IR)
            * 5785 MHz [157] (30.0 dBm) (no IR)
            * 5805 MHz [161] (30.0 dBm) (no IR)
            * 5825 MHz [165] (30.0 dBm) (no IR)
       ...

В приведённом списке видим, что чипсет поддерживает каналы 1−14 (2,4 ГГц) и каналы 36−165 (5 ГГц), но вы заметили флаг no IR?

Флаг no IR обозначает no-initiating-radiation (то есть пассивное сканирование). Это значит, что данный режим запрещён в случае, когда устройство первым инициирует излучение (включая маяки). Другими словами, нельзя запускать точку доступа на этих каналах!

Нормативные требования

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

Но погодите!

Я живу в США, а по ссылке написано, что я имею право инициировать излучение на каналах 36-48, так в чём дело? Посмотрим, какой домен регулирования используется в данный момент:

$ iw reg get
country 00: DFS-UNSET
        (2402 - 2472 @ 40), (N/A, 20), (N/A)
        (2457 - 2482 @ 40), (N/A, 20), (N/A), NO-IR
        (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR
        (5170 - 5250 @ 80), (N/A, 20), (N/A), NO-IR
        (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, NO-IR
        (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR
        (5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR
        (57240 - 63720 @ 2160), (N/A, 0), (N/A)

Выдача показывает, что сейчас активен мировой домен (или не установлен), то есть минимальные значения, разрешённые в каждой стране.

К сожалению, вручную установить домен sudo iw reg set не получится, потому что домен зашит в EEPROM:

$ dmesg | grep EEPROM
[   12.123068] ath: EEPROM regdomain: 0x6c

Патч!

К счастью, нормативные требования обрабатываются на уровне драйвера, так что их можно легко изменить: находим патч в исходниках Open-WRT.

Прежде всего, не забудьте подключить репозиторий исходного кода из /etc/apt/sources.list:

$ cat /etc/apt/sources.list
...
deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted 
...

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

$ sudo apt-get install build-essential fakeroot
$ sudo apt-get build-dep linux

Скачайте источники своего ядра:

$ apt-get source linux

Поскольку оригинальный патч Open-WRT нельзя применить «как есть» к дереву ядра Ubuntu из-за тонких различий в системе сборки, пришлось его исправить:

$ VERSION=$(uname -r)
$ cd linux-${VERSION%%-*}
$ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b

Всё готово для сборки:

$ fakeroot debian/rules clean
$ fakeroot debian/rules binary-generic

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

$ cd ..
$ sudo dpkg -i linux*.deb

Перезагрузка, и вуаля:

$ sudo iw reg set US
$ iw list
...
      Frequencies:
          * 5180 MHz [36] (17.0 dBm)
          * 5200 MHz [40] (17.0 dBm)
          * 5220 MHz [44] (17.0 dBm)
          * 5240 MHz [48] (17.0 dBm)
          * 5260 MHz [52] (23.0 dBm) (radar detection)
          * 5280 MHz [56] (23.0 dBm) (radar detection)
          * 5300 MHz [60] (23.0 dBm) (radar detection)
          * 5320 MHz [64] (23.0 dBm) (radar detection)
          * 5500 MHz [100] (23.0 dBm) (radar detection)
          * 5520 MHz [104] (23.0 dBm) (radar detection)
          * 5540 MHz [108] (23.0 dBm) (radar detection)
          * 5560 MHz [112] (23.0 dBm) (radar detection)
          * 5580 MHz [116] (23.0 dBm) (radar detection)
          * 5600 MHz [120] (23.0 dBm) (radar detection)
          * 5620 MHz [124] (23.0 dBm) (radar detection)
          * 5640 MHz [128] (23.0 dBm) (radar detection)
          * 5660 MHz [132] (23.0 dBm) (radar detection)
          * 5680 MHz [136] (23.0 dBm) (radar detection)
          * 5700 MHz [140] (23.0 dBm) (radar detection)
          * 5720 MHz [144] (23.0 dBm) (radar detection)
          * 5745 MHz [149] (30.0 dBm)
          * 5765 MHz [153] (30.0 dBm)
          * 5785 MHz [157] (30.0 dBm)
          * 5805 MHz [161] (30.0 dBm)
          * 5825 MHz [165] (30.0 dBm)
...

Во избежание автоматического обновления может потребоваться закрепить версию ядра Linux.

Конфигурация

Новый файл конфигурации hostapd будет довольно простым: hw_mode=a включает диапазоны 5 ГГц, а ieee80211ac=1 включает 802.11ac (VHT). Опция ieee80211d=1 с указанием country_code=US определяет нормативный домен, под которым мы работаем.

Чтобы максимально использовать пропускную способность, ht_capab и vht_capab должны отражать возможности оборудования:

$ iw list
...
    Band 1:
      Capabilities: 0x19e3
              RX LDPC
              HT20/HT40
              Static SM Power Save
              RX HT20 SGI
              RX HT40 SGI
              TX STBC
              RX STBC 1-stream
              Max AMSDU length: 7935 bytes
              DSSS/CCK HT40
...
    Band 2:
      VHT Capabilities (0x338001b2):
              Max MPDU length: 11454
              Supported Channel Width: neither 160 nor 80+80
              RX LDPC
              short GI (80 MHz)
              TX STBC
              RX antenna pattern consistency
              TX antenna pattern consistency

С учётом этого вот окончательный hostapd.conf:

$ cat /etc/hostapd/hostapd.conf
#### Interface configuration ####
interface=wlp5s0
bridge=br0
driver=nl80211
##### IEEE 802.11 related configuration #####
ssid=iCanHearYouHavingSex
hw_mode=a
channel=0
auth_algs=1
wmm_enabled=1
country_code=US
ieee80211d=1
ieee80211h=0
##### IEEE 802.11n related configuration #####
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CK-40][LDPC][MAX-AMSDU-7935]
##### IEEE 802.11ac related configuration #####
ieee80211ac=1
vht_capab=[MAX-MPDU-11454][RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][TX-ANTENNA-PATTERN][RX-ANTENNA-PATTERN]
vht_oper_chwidth=1
##### WPA/IEEE 802.11i configuration #####
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=YouCantGuess

Документацию hostpad.conf см. в /usr/share/doc/hostapd/examples/hostapd.conf.

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

Независимо от того, хотите вы настроить гостевую точку доступа или выделенную беспроводную сеть для своего VPN, в какой-то момент придётся настроить виртуальный SSID.

Диаграмма

Исходя из текущей конфигурации, вот обновлённая диаграмма, что мы хотим получить. Предполагая, что wlp5s0 является физическим беспроводным интерфейсом, виртуальный SSID будет работать на виртуальном интерфейсе wlan0, используя собственную подсеть 192.168.2.0/24:

Подготовка

Прежде всего проверим, что ваше беспроводное устройство поддерживает несколько SSID:

$ iw list
    ...
    valid interface combinations:
    * #{ AP, mesh point } <= 8,
    total <= 8, #channels <= 1, STA/AP BI must match
    ...

Как видим, чипсет поддерживает до восьми точек доступа на одном канале. Это означает, что можно настроить до семи виртуальных SSID, и все они будут работать на одном канале.

Сетевой интерфейс

Согласно документации в hostapd.conf, существует строгая связь между MAC-адресом физического интерфейса и BSSID виртуальных интерфейсов:

hostapd will generate a BSSID mask based on the BSSIDs that are configured. hostapd will verify that dev_addr & MASK == dev_addr. If this is not the case, the MAC address of the radio must be changed before starting hostapd. If a BSSID is configured for every secondary BSS, this limitation is not applied at hostapd and other masks may be used if the driver supports them (e.g., swap the locally administered bit)

BSSIDs are assigned in order to each BSS, unless an explicit BSSID is specified using the ‘bssid’ parameter.

If an explicit BSSID is specified, it must be chosen such that it:

— results in a valid MASK that covers it and the dev_addr

— is not the same as the MAC address of the radio

— is not the same as any other explicitly specified BSSID

Чтобы выполнить эти требования и позволить hostapd автоматически назначать BSSID виртуального интерфейса(ов), обновим MAC-адрес физического беспроводного интерфейса, обнулив четыре наименее значимых бита. Этого хватит на 15 виртуальных BSSID — намного больше, чем необходимо.

Сначала определим текущий MAC-адрес:

$ ip addr show wlp5s0 | grep link | awk '{print $2}'
44:c3:06:00:03:eb

Если очистить четыре последних бита и установить бит U/L, получится MAC-адрес 46:c3:06:00:03:e0.

Теперь обновим конфигурацию, чтобы установить правильный MAC-адрес прямо перед загрузкой интерфейса, а также объявить виртуальный беспроводной интерфейс в соответствии с нашей диаграммой:

$ cat /etc/network/interfaces
...
# Physical Wireless
auto wlp5s0
iface wlp5s0 inet manual
    pre-up ip link set dev wlp5s0 address 46:c3:06:00:03:e0
# Virtual Wireless
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.2.1
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.2.255
    post-up /usr/sbin/dnsmasq \
		--pid-file=/var/run/dnsmasq-wlan0.pid \
		--conf-file=/dev/null \
		--interface=wlan0 --except-interface=lo \
		--bind-interfaces \
		--dhcp-range=192.168.2.10,192.168.2.150,24h
    post-down cat /var/run/dnsmasq-wlan0.pid | xargs kill
...

Отлично. Я использую dnsmasq как DHCP-сервер — не стесняйтесь заменить на то, что вам нравится. Обратите внимание, что для корректной работы виртуального интерфейса требуется allow-hotplug.

Конфигурация точки доступа

Теперь самое простое: добавим виртуальный SSID к текущей конфигурации hostapd. Просто добавьте это в конец существующего файла hostapd.conf:

$ cat /etc/hostapd/hostapd.conf
...
### Virtual SSID(s) ###
bss=wlan0
ssid=MyVirtualSSID
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=you_cant_guess

В приведённом примере я применил шифрование WPA2, но тут доступно большинство опций радиоинтерфейса (например, channel). Можно добавить больше виртуальных SSID, просто дописав строчки в конфигурационном файле, согласно объявленным и правильно настроенным виртуальным интерфейсам.

Теперь перезагрузимся — и видим свой новый SSID вместе с новым беспроводным интерфейсом (обратите внимание на MAC-адрес):

$ ip addr show wlan0 | grep link | awk '{print $2}'
46:c3:06:00:03:e1

Вот и всё, ребята!

Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)

Недавно нашей задачей было установить общедоступные компьютеры за отдельным маршрутизатором для контроля доступа в Интернет. Поскольку у нас полно компьютерных компонентов, мы решили построить маршрутизатор на более старом компьютере с операционной системой Ubuntu Server 18.04.1 LTS (Bionic Beaver).

Мы написали это руководство, чтобы помочь другим с подобной задачей.

 

ПРЕДПОСЫЛКИ

  • Компьютер под управлением Ubuntu Server 18.04.1 LTS. Не будем вдаваться в подробности установки операционной системы Ubuntu. Это довольно просто.
  • Как минимум два сетевых интерфейса. Один предназначен для глобальной сети, а другой – для локальной сети маршрутизатора. Вы также можете использовать некоторые коммутаторы в случае, если вы собираетесь подключить несколько устройств в локальной сети, купить коммутаторы или маршрутизаторы можно на сайте http://spw.ru/. Но это почти все, что вам нужно для работающего роутера.

 

Примечание

Поскольку мы будем изменять брандмауэр, мы бы не советовали настраивать его через SSH. Вы можете заблокировать себя во время процесса.

 

1. НАСТРОЙКА СЕТЕВЫХ ИНТЕРФЕЙСОВ

Во-первых, нам нужно настроить сетевые интерфейсы, которые мы будем использовать. В нашем случае eth0 будет WAN, а eth2 LAN.

WAN (eth0) – этот интерфейс получит IP от провайдера, поэтому мы оставляем его с помощью DHCP.

LAN (eth2) – мы настраиваем интерфейс со статическим IP внутри подсети, которую мы будем использовать для локальной сети

Небольшое замечание: Ubuntu 18.04 не использует традиционный файл конфигурации сети  /etc/network/interfaces. Он использует NETPLAN. В нашем случае, есть конфигурационный файл, называется 50-cloud-init.yaml  внутри папки /etc/netplan/. В вашем случае файл может иметь другое имя, просто найдите файл с расширением.yaml внутри папки netplan.

Давайте откроем это с помощью nano:

sudo nano /etc/netplan/50-cloud-init.yaml

 

Отредактируйте его в соответствии с потребностями вашей сети, в моем примере я настроил это так:

# Этот файл создан на основе информации, предоставленной
# источник данных. Изменения в нем не будут сохраняться во всем экземпляре.
# Чтобы отключить возможности сетевой конфигурации cloud-init, напишите файл
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg со следующим:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
        eth2:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.4.4
                search: []
    version: 2

 

Подводя итог: eth0, который является WAN, получает IP от модема интернет-провайдера. Eth2 является частью локальной сети маршрутизатора. Нам нужен статический IP и DNS-серверы (в нашем примере мы использовал Google). Также мы не настроили ни один шлюз на eth2.

Сохраните конфигурацию с помощью следующих команд:

sudo netplan generate
sudo netplan apply

 

2. НАСТРОЙКА СЕРВЕРА DHCP

Далее мы настроим DHCP-сервер. Мы действительно не хотим настраивать каждый клиент со статическим IP в сети LAN. Для этой задачи нам нужно установить следующий пакет.

sudo apt-get install isc-dhcp-server

 

Далее нам нужно отредактировать  файл /etc/default/isc-dhcp-server. Это сообщает DHCP-серверу, какой сетевой интерфейс он должен прослушивать. В нашем случае это конечно eth2, интерфейс локальной сети.

Вводим команду:

sudo nano /etc/default/isc-dhcp-server

 

А под «INTERFACESv4» вставьте сетевой интерфейс вашей локальной сети. В нашем случае это eth2 :

INTERFACESv4 = "eth2"

 

Следующим шагом будет настройка DHCP-сервера. Это делается путем редактирования файла  /etc/dhcp/dhcpd.conf

sudo nano /etc/dhcp/dhcpd.conf

 

Вот куча разных параметров, большинство из них комментируются # перед каждой строкой. Короче говоря, мы запишем только те параметры, которые мы использовал, и/или отредактируем их в соответствии со своими потребностями. Если вы хотите, вы можете удалить все содержимое этого файла и просто скопировать/вставить код ниже. Конечно, вы меняете IP-адреса, шлюзы и т. д. В соответствии с вашей собственной конфигурацией сети.

option domain-name "whatever.you.want";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.1.101 192.168.1.200;
     option subnet-mask 255.255.255.0;
     option routers 192.168.1.1;
     option broadcast-address 192.168.1.255;
}

 

Теперь давайте применим настройки и включим DHCP-сервер при загрузке с помощью следующих команд:

sudo systemctl restart isc-dhcp-server
sudo systemctl enable isc-dhcp-server

 

С помощью следующей команды мы проверяем статус.

sudo systemctl status isc-dhcp-server

 

Если все настроено правильно, должна быть строка «ACTIVE». В противном случае вы что-то  напутали в файле /etc/dhcp/dhcpd.conf. Возможно, отсутствует точка с запятой или скобка.

 

3. НАСТРОЙКА ФАЙЕРВОЛА

Чтобы иметь функциональный маршрутизатор, нам нужно правильно настроить брандмауэр. Это делается путем записи некоторых правил iptables. Чтобы сохранить правила при перезапуске сервера, мы создали скрипт, который будет выполняться во время загрузки.

Сначала давайте включим UFW с…

sudo ufw enable

 

Далее нам нужно включить пересылку пакетов из WAN в LAN. У нас следующий параметр внутри файла /etc/ufw/sysctl.conf:

Открываем файл…

sudo nano /etc/ufw/sysctl.conf

 

… и мы просто удаляем # перед следующей строкой:

net/ipv4/ip_forward=1

 

В Ubuntu 18.04 файл /etc/rc.local больше не существует. Но мы все еще можем создать это с:

sudo nano /etc/rc.local

 

Затем скопируйте/вставьте следующий скрипт. Есть комментарии, объясняющие каждое правило iptables. Вы можете удалить их, если хотите, но вы НЕ должны  удалять #! /bin/bash. Также измените eth0 и eth2, если ваши сетевые интерфейсы имеют несколько разных имен.

#!/bin/bash

# /etc/rc.local

# Default policy to drop all incoming packets.
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Accept incoming packets from localhost and the LAN interface.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth2 -j ACCEPT

# Accept incoming packets from the WAN if the router initiated the connection.
iptables -A INPUT -i eth0 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# Forward LAN packets to the WAN.
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT

# Forward WAN packets to the LAN if the LAN initiated the connection.
iptables -A FORWARD -i eth0 -o eth2 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# NAT traffic going out the WAN interface.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# rc.local needs to exit with 0
exit 0

 

Этот сценарий должен выполняться во время загрузки, поэтому нам нужно сделать файл исполняемым с помощью следующей команды:

sudo chmod 755 /etc/rc.local

 

И это все. Мы перезагружаем маршрутизатор с помощью команды sudo reboot, и мы готовы к работе. 🙂

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

Создание простого маршрутизатора на базе GNU/Linux. — «Я и Ubuntu»

Недавно столкнулся с проблемой настройки маршрутизатора на базе GNU/Linux, так как iptables я знаю довольно плохо. Итак немного почитав о этом фаерволе я таки нашёл несколько строчек с помощью которых можно реализовать выход клиентов через шлюз в глобальную сеть и сеть провайдера.
1.Итак, для начала необходимо установить GNU/Linux систему, я выбрал Ubuntu server. На этом этапе заострять внимание я не буду, так как эта тема хорошо освещена на многих ресурсах.

2.Настроить соединения с локальной сетью и VPN сервером (актуально для моей сети, но не критично для других типов подключения).
Желательно все настройки вводить непосредственно в конфигурационные файлы, для Ubuntu этот файл распологается тут : /etc/network/interfaces


auto lo
iface lo inet loopback

auto eth2
iface eth2 inet dhcp

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
lo – интерфейс локального лупбека, eth2 – интерфейс смотрящий в локальную сеть провайдера (настраивается по DHCP), eth0 – интерфейс смотрящий в вашу сеть (домашнюю или корпоративную).

3. Редактируем файл /etc/rc.local, дабавляем в него строки:


iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Итак тут вам нужно поменять лишь имена ваших интерфейсов, в моём варианте происходит НАТинг всей локальной сети провайдера и VPN в мою локальную сеть (192.168.0.0/24).

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


sudo apt-get install bind9

5. 5.Правим файл /etc/resolv.conf и добавляем туда свои DNS


nameserver X.X.X.X
nameserver X.X.X.X

Перезагружаем сервер. Итак сервер готов к работе.

Мощный домашний маршрутизатор своими руками — «Хакер»

Хотя в интернет-магазинах есть любое сетевое оборудование, но всё равно найдутся любители сделать всё по-своему. Например, инженер Ник Пегг был очень недоволен ограничениями классического домашнего маршрутизатора WRT54GL с 4 МБ флэш-памяти и слабым ЦПУ. В то же время, будучи весьма стеснённым в средствах, он не мог позволить себе профессиональный маршрутизатор.

Выход нашёлся: собрать устройство своими руками из компьютерных комплектующих, которые найдутся в шкафу или б/у в интернете.

Материнская плата Intel D2500CCE Mini-ITX в стоечном корпусе

Нужно было нечто дешёвое, с низким энергопотреблением и несколькими сетевыми адаптерами.

Свой выбор Ник остановил на материнской плате Mini-ITX, которая идеально подходит для такой задачи. В его случае достаточно было платы с двумя сетевыми разъёмами, но несложно достать такую же плату с большим количеством NIC.

Для беспроводной связи инженер взял адаптер Intel 7260-ac Mini-PCIe, хотя позже сам понял ошибочность такого решения. Из-за специфичной прошивки и драйвера под Linux карта упорно отказывалась работать в диапазоне 5 ГГц.

Карта Intel 7260-ac Mini-PCIe

Задним умом он понял, что лучше использовать карту на чипсете Atheros и с нормальным драйвером. В любом случае, предварительно следует обязательно проверить в интернете, что другим хакерам успешно удалось решить проблему и накатить прошивку OpenWRT.

Так или иначе, инструкция Ника Пегга по сетевой настройке и конфигурации оборудования будет очень полезна при попытке реализовать подобный проект.

Простой маршрутизатор на Linux Ubuntu Server

ubuntu

Пoслe пoявлeния дoмa втoрoгo кoмпьютeрa был пoстaвлeн вoпрoс o приoбрeтeнии рoутeрa либo сoздaния дoмaшнeгo сeрвeрa нa Linux. Пoслe нeдoлгиx рaзмышлeний всe-тaки oстaнoвился нa приoбрeтeнии стaрeнькoгo кoмпa, устaнoвки нa нeм Ubuntu Server бeз грaфичeскoй oбoлoчки.  Грaфичeскaя oбoлoчкa Ubuntu будь тo KDE или Gnome зaнимaeт мнoгo рeсурсoв, a этo для слaбeнькoгo кoмпьютeрa мoжeт имeть губитeльныe пoслeдствия. Итaк, быстрo дeлaeм мaршрутизaтoр нa тoм жeлeзe, нa кoтoрoe xвaтилo дeнeг.

Нa бoрту мaтeринскoй плaты ужe былa 1Gigabit сeтeвaя кaртa, и eщe двe вoткнули в свoбoдныe PCI-слoты.

Пoслe зaгрузки систeмы нeoбxoдимo прoвeрить рaспoзнaлись ли сeтeвыe кaрты.

ifconfig - a
пoкaжeт всe вoзмoжныe сeтeвыe интeрфeйсы.   

   Сетевой интерфейс eth0 уже подключен к интернет и был настроен  в процессе установки
операционной системы.   

   Теперь нам  надо настроить сетевые интерфейсы eth2 и eth3,  к которым и будут
подключаться компьютеры размещенные в локальной сети.   

   Настройки сетевых интерфейсов размещаются в файле /etc/network/interfaces.
Там уже есть следующие строки:
auto lo   
   iface lo inet loopback   

   auto eth0   
   iface eth0 inet static   # интерфейс имеет статический адрес    
   address 77.77.77.55   # ip-адрес, выдаваемый провайдером   
   netmask 255.255.255.128   
   network 77.77.77.128   
   broadcast 77.77.7.255   
   gateway 77.77.77.129   # шлюз провайдера   
   # dns-* options are implemented by the resolvconf package, if installed   
   dns-nameservers 8.8.8.8  # днс-сервер Google DNS
lo -локальный loopback, eth0 – сетевая карта, в которую воткнут сетевой кабель от
провайдера.   

   Добавляем интерфейсы,  направленные на локальную сеть
auto eth2   
   iface eth2 inet static   
   address 192.168.20.1   
   netmask 255.255.255.0   
   network 192.168.20.0   

   auto eth3   
   iface eth3 inet static   
   address 192.168.20.2   
   netmask 255.255.255.0   
   network 192.168.20.0

Теперь осталось назначить правила раздачи интернета на локальную сеть  с помощью маскарадинга через iptables.

Но тут есть одно но – так как при перезагрузке правила будут очищаться, то желательно сделать так, что-бы они отрабатывались при старте сервера.

Для этого помещаем следующиее в  файл /etc/rc.local

iptables -F   
   iptables -t nat -F   
   iptables -t mangle -F   
   iptables -X   
   iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE   
   echo 1 > /proc/sys/net/ipv4/ip_forward

 

В дальнейшем есть необходимость настроить таблицы маршрутизации с помощью iptables для увеличения безопасности нашего сервера.

Строку echo 1 > /proc/sys/net/ipv4/ip_forward можно исключить, если в файле /etc/sysctl.confраскомментировать строку net.ipv4.forwarding=1.

В файле /etc/resolv.conf укажите адреса DNS-серверов:

nameserver xxx.xxx.xxx.xxx   
   nameserver xxx.xxx.xxx.xxx
И не забудьте после всех манипуляций перезагрузить сетевые интерфейсы
sudo /etc/init.d/networking start

Настройка Ubuntu или Debian в качестве маршрутизатора

Ваш старый компьютер Pentium 4 может быть использован в качестве полнофункционального маршрутизатора. Установить Ubuntu/Debian и следовать этот шаг для установки Ubuntu в качестве маршрутизатора.

Вы можете взять контроль над каждым потоком данных через маршрутизатор.

Хорошо, давайте начнем. Настройка маршрутизатора на Ubuntu или Debian, чтобы настроить маршрутизатор необходимо нужно две сетевые карты

Настройка Ubuntu или Debian в качестве маршрутизатора

Тестовая среда

  • ОС – Ubuntu LTS
  • Номер NIC – 2
  • Порт LAN IP (eth0) – 192.168.1.1/24
  • Порт WAN IP (eth2) – 172.16.1.1/24

1. Установите необходимые инструменты

[email protected]:~$  sudo apt-get install iptables isc-dhcp-server

 

Iptables используется для управления брандмауэром, маршрутизации. Вы можете прочитать подробности здесь.

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

[email protected]:~$ sudo nano -w /etc/default/isc-dhcp-server
[email protected]:~$ sudo nano -w /etc/dhcp/dhcpd.conf

 

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

ddns-update-style none;

 

Вам необходимо установить имя домена и сервера имен:

## Set a domain name for your LAN ##
option domain-name "andreyex.local";
 
## Set DNS server IP address, you can set to your ISP's dns server too or use Google DNS server##
option domain-name-servers 192.168.1.2, 192.168.1.3;

 

Увеличение времени аренды. Время устанавливается в секундах:

### Set the length in seconds that will be assigned to a lease if the client requesting the lease does not ask for a specific expiration time. ##
 ### This is used for both DHCPv4 and DHCPv6 leases (it is also known as the "valid lifetime" in DHCPv6). ###
default-lease-time 86400;
## Set the maximum length in seconds that will be assigned to a lease ##
max-lease-time 604800;

 

Директива authoritative должна быть раскомментирована:

authoritative;

 

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

subnet 192.168.1.0 netmask 255.255.255.0 {
 ## dhcp start and end IP range ##
  range 192.168.1.100 192.168.1.200;
  option subnet-mask 255.255.255.0; ## subnet 
  option broadcast-address 192.168.1.255; ## broadcast
  option routers 192.168.1.254; ## router IP
}

 

Тестовый файл конфигурации DHCP, если есть какая-либо ошибка.

[email protected]:~$ sudo dhcpd -t /etc/dhcp/dhcpd.conf

 

Теперь перезапустите сервер DHCP

[email protected]:~$ sudo service isc-dhcp-server restart

 

Теперь вот самая важная часть.

Необходимо включить kernel, чтобы пересылать трафик через него

Отредактируйте конфигурационный файл /etc/sysctl.conf и измените обе строки

net.ipv4.conf.default.rp_filter=1
net.ipv4.ip_forward=1

 

Теперь добавьте правило Iptable к данным по маршруту

[email protected]:~$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 

Сохраните правило iptable

[email protected]:~$sudo iptables save

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

Превращаем бытовой роутер в хак-станцию / Хабр

Решил написать статью о своём опыте превращения бытового роутера в хак-станцию.
Атака на WPS иногда занимает более 10 часов. Чем же брутить? Выбор не большой:
PC – совместимые железяки
Android – устройства
— Специализированные девайсы вроде WiFi Pineapple
Встала задача брутить на работе, оставлять ноутбук не хотелось. Решил попробовать Android смартфоном. Выяснилось, что, режим монитора в драйвере Wi-Fi отказывается корректно работать. Свою задачу, осуществил роутером.

Выбор беспроводного роутера



Перед роутером я поставил следующие критерии:

— наличие прошивки OpenWrt/DD-WRT/etc для установки Aircrack-ng, Reaver/Bully

— наличие USB порта

— съёмная антенна (требовалось вынести антенну из помещения)

Реальность, оказалась не столь радужной. Актуальных девайсов в продаже с такими характеристиками оказалось не много.

Первый роутер, который я приобрёл для превращения его хак-станцию был UPVEL UR-326N4G. Однако его пришлось вернуть в магазин т.к. OpenWrt от UPVEL не поддерживала подключение USB накопителей. А подключить модули для полноценной поддержки USB так же было невозможно из-за недостаточности свободного места.

К выбору второго роутера я подошёл более серьёзно. Был куплен ASUS RT-N10U B. На первый взгляд единственным минусом было отсутствия для этой модели прошивки OpenWrt. Но зато были DD-WRT, Tomato, прошивка от Олега. Вроде бы не плохо. Установил OPKG под DD-WRT, смонтировал USB Flash. Развернул софт Aircrack-ng. Попытался перевести в airmon-ng Wi-Fi в режим монитора. И тут меня ждало разочарование, оказалось, что его BCM5357 не мог переходить в режим монитора.

Этот ASUS RT-N10U B с большим трудом удалось поменять на другой роутер. DNS крайне тугой магазин. И так наконец я взял TP-Link TL-MR3220 v2. Оказалось, что в нём используется Atheros AR9331, такой же установлен в Pineapple Mark V.

Превращение в хак-станию

Прошивка с сайта OpenWrt для TP-Link TL-MR3220 v2, не имела в себе модулей для монтирования USB накопителей. Пришлось поискать модифицированную версию: https://app.box.com/s/cqk23ztqlux1zs034896
Процесс установки описан подробно здесь (простая установка OEM-способом).
Итак, OpenWrt раскатали, всё настроено по дефолту.
Теперь подготавливаем USB накопитель. Необходимо отформатировать флешку в Ext3 (самый надёжный выбор ФС, с FAT работать не будет).
Подключаем USB накопитель к роутеру и перезагружаем его. Далее идем в веб-интерфейс 192.168.1.1. Открываем вкладку System ⇾ Mount Points

Далее как на скриншотах:

Далее открываем вкладку Network ⇾ Wifi нажимаем Enable на интерфейсе (radio1)

Нужно сменить дефолтный пароль, иначе не получиться авторизоваться чрез SSH.

Перезагружаемся.

Наша флешка будет смонтирована в /tmp/overlay-disabled

Теперь о самом главном, о софте. Для пентестов нам нужен следующий набор:

• aircrack-ng

• reaver

• bully

Если вы хотите устанавливать утилиты самостоятельно, то нужно выполнить следующее:

echo "dest usb /tmp/overlay-disabled" >> /etc/opkg.conf

Устанавливать нужно с ключом -d usb
Пример:
opkg install -d usb aircrack-ng
Софт для TP-Link TL-MR3220 v2 подходит от ar71xx

Но тем, кто не желает тратить время на установку или сборку утилит, я предлагаю готовый набор, который нужно скопировать в корень флешки: https://yadi.sk/d/5WUca8OrhkULA

Версии:

  • aircrack-ng — 1.1-3
  • bully — 1.0-22
  • reaver с поддержкой pixie!

Сразу же после того, как зашли по SSH нужно применить следующие патчи:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/overlay-disabled/usr/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/overlay-disabled/lib
export PATH=$PATH:/tmp/overlay-disabled/usr/bin
export PATH=$PATH:/tmp/overlay-disabled/usr/sbin

Прошу не пинать сильно в комментариях, т.к. делалось всё «на скорую руку».

Заключение

Как пользоваться этими утилитами я не буду здесь описывать. Укажу только на один нюанс. Для того что бы airmon-ng мог перебирать каналы, нужно выполнить следующее:

ifconfig wlan0 down
iw reg set BO
iwconfig wlan0 txpower 27
airmon-ng start wlan0

Благодарю за внимание!

Создайте собственный образ маршрутизатора Linux для сетевых эмуляторов UNetLab и EVE-NG

Эмуляторы сетей UNetLab и EVE-NG могут стать мощными инструментами для эмуляции сетей с открытым исходным кодом. Однако при первой установке они поддерживают образы Linux лишь в ограниченной степени. К счастью, UNetLab и EVE-NG легко расширить для поддержки мощных универсальных образов Linux-маршрутизаторов и серверов.

В своей конфигурации по умолчанию UNetLab и EVE-NG поддерживают узлы Linux, на которых работают загрузочные образы Live CD с графическим пользовательским интерфейсом, доступным через VNC.Это не подходит для эмуляции маршрутизаторов или серверов Linux.

Чтобы исправить это ограничение, мы покажем вам, как создать образ маршрутизатора Linux для EVE-NG, который загружается с виртуального жесткого диска, к которому можно получить доступ через Telnet для упрощения настройки и управления, и который имеет постоянную файловую систему, на которую мы может устанавливать программное обеспечение и изменять файлы конфигурации.

Добавьте собственный образ сервера Linux в UNetLab или EVE-NG, выполнив следующую процедуру:

  1. Установите сервер Linux на виртуальную машину на вашем хост-компьютере
  2. Запустите новую виртуальную машину и настройте ее так, чтобы она была доступна через Telnet после перемещения в UNetLab или EVE-NG:
    • Установить и включить Telnet
    • Добавить последовательный интерфейс
    • Добавить сетевое программное обеспечение
    • Остановить виртуальную машину
  3. Скопируйте образ диска новой виртуальной машины в виртуальную машину UNetLab или EVE-NG.
  4. Конвертировать образ диска в формат QEMU
  5. Создайте собственный файл шаблона UNetLab и новый файл конфигурации
  6. Протестируйте изображение и шаблон

В качестве альтернативы вы можете скопировать ISO-образ установочного диска в виртуальную машину UNetLab или EVE-NG и создать образ диска виртуальной машины Ubuntu Server с помощью команд QEMU.Это заменит шаги с 1 по 4 выше.

Установить Linux-сервер на виртуальную машину

В этом случае мы установим Ubuntu Server 16.10 на виртуальную машину, управляемую VMware Player. Мы используем VMware Player, потому что уже используем его для запуска EVE-NG VM 1 , и он должен работать на любой операционной системе главного компьютера.

Загрузите доступный в настоящее время ISO-файл Ubuntu Server — в данном случае это ubuntu-16.10-server-amd64.iso — с веб-сайта Ubuntu Server.

Откройте приложение VMware Player и нажмите кнопку Create a New Virtual Machine . Появится окно Мастер создания новой виртуальной машины .

В этом примере мы воспользуемся функцией VMware Easy Install , а затем установим OpenSSH вручную после создания виртуальной машины. Щелкните переключатель Использовать образ ISO , чтобы использовать Простая установка 2 .

Чтобы использовать Easy Install , щелкните переключатель Использовать образ ISO и введите путь к файлу ISO, который вы скачали ранее.Затем вам будет предложено ввести идентификатор пользователя и пароль, которые вы хотите настроить на новой виртуальной машине. Затем он попросит вас ввести имя новой виртуальной машины. Я назвал его ubuntuserver .

Последний шаг — очень важный : мы должны создать файл одного виртуального диска для новой виртуальной машины. По умолчанию проигрыватель VMware создает несколько файлов на диске. В окне Размер диска не забудьте выбрать Сохранить виртуальный диск как отдельный файл .Помните, что это не вариант по умолчанию, поэтому вы должны выбрать его самостоятельно.

Мастер завершит установку без каких-либо дополнительных действий со стороны пользователя. Процесс должен занять несколько минут.

Запустите новую виртуальную машину и настройте ее

Если вы выбрали опцию Автоматически запускать виртуальную машину , она запустится автоматически. Если нет, запустите виртуальную машину в VMware Player.

Появится консоль виртуальной машины VMware Player с запросом на вход.Войдите в систему, используя идентификатор пользователя и пароль, которые вы указали в процессе установки.

Установить OpenSSH

Поскольку мы использовали функцию VMware Easy Install , OpenSSH еще не доступен на виртуальной машине.

Установите OpenSSH. В окне консоли VMware Player введите следующие команды:

  ubuntu: ~ $ sudo apt-get update
ubuntu: ~ $ sudo apt-get install openssh-server
  
Подключиться к ВМ из окна терминала

В окне консоли VMware найдите IP-адрес, назначенный виртуальной машине.Я использовал команду ifconfig . В моем случае назначенный IP-адрес — 172.16.66.131 .

Сверните окно консоли VMware. Мы больше не хотим его использовать. Мы будем использовать окно терминала.

Откройте окно терминала и подключитесь к виртуальной машине по SSH. В моем случае я установил виртуальную машину Ubuntu Server с идентификатором пользователя brian , и VMware предоставила ей IP-адрес 172.16.66.131 , поэтому моя команда SSH выглядит так, как показано ниже. Оба эти значения будут для вас разными.

  t420: ~ $ ssh [email protected]
  

Установите Telnet на виртуальную машину сервера Ubuntu

Нам нужен Telnet для взаимодействия с сетевым эмулятором EVE-NG, но он не установлен и не включен в Ubuntu Server. Нам нужно установить и включить telnet на сервере Ubuntu.

Для установки Telnet:

  ubuntu: ~ $ sudo apt-get install xinetd telnetd
  

Чтобы включить Telnet, создайте файл конфигурации telnet в каталоге / etc / xinetd.d каталог 3 :

  убунту: ~ $ sudo nano /etc/xinetd.d/telnet
  

Добавьте следующий текст в новый файл /etc/xinetd.d/telnet :

  служебный телнет
{
disable = нет
flags = ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ
socket_type = поток
ждать = нет
пользователь = корень
сервер = /usr/sbin/in.telnetd
log_on_failure + = USERID
}
  

Сохраните файл и перезапустите службу xinetd .

  ubuntu: ~ $ sudo service xinetd restart
  
Добавить последовательный порт на ВМ

Если VNC не используется, UNetLab или EVE-NG подключается к узлам с помощью последовательного интерфейса.Чтобы разрешить узлу подключаться к UNetLab или EVE-NG, мы должны включить соединение ttyS0 через последовательный порт на Ubuntu Server VM 4 .

Выполните следующие команды в окне Терминала:

  ubuntu: ~ $ sudo systemctl enable [email protected]
ubuntu: ~ $ sudo systemctl start [email protected]
  

ПРИМЕЧАНИЕ: Ubuntu Server 16.10 использует систему инициализации systemd , поэтому описанная выше процедура работает в Ubuntu Server 16.10 или любом другом дистрибутиве, который использует systemd .Процедура, которую вы используете для добавления последовательного интерфейса в систему Linux, может отличаться, если вы используете другую систему инициализации. Например, если вы используете другой дистрибутив Linux или более старую версию Ubuntu Server. Ниже я перечисляю некоторые ссылки на другие методы настройки последовательного интерфейса для других систем инициализации и дистрибутивов Linux:

Если вы новичок в различных системах инициализации, используемых в Linux, просмотрите это прекрасное резюме различий между init, upstart и systemd или поищите в Google «сравнение систем инициализации».

Установить сетевое программное обеспечение

Установите сетевые службы, которые мы можем использовать в наших лабораториях UNetLab или EVE-NG: Quagga и Traceroute .

  ubuntu: ~ $ sudo apt-get install -y quagga quagga-doc traceroute
  

Лучше всего установить любое программное обеспечение, которое, по вашему мнению, вы можете использовать в этом образе сейчас, перед тем, как устанавливать образ в EVE-NG или UNetLab VM.

Остановить ВМ

Мы завершили настройку новой виртуальной машины. Чтобы остановить новую ВМ, выполните в консоли ВМ следующую команду:

  ubuntu: ~ $ sudo shutdown -h сейчас
  

Скопируйте новый образ диска сервера Linux в виртуальную машину UNetLab или EVE-NG

В этом примере я использую EVE-NG, но все описанные ниже процедуры работают одинаково в UNetLab.

Запустите виртуальную машину EVE-NG в VMware Player.

Откройте новое окно терминала и войдите в виртуальную машину EVE-NG с помощью SSH. IP-адрес виртуальной машины EVE-NG отображается в окне консоли виртуальной машины EVE-NG. В данном случае это 172.16.66.120.

  t420: ~ $ ssh [email protected]
  

Теперь вы вошли в оболочку Linux виртуальной машины EVE-NG. На виртуальной машине EVE-NG создайте новый каталог для образа маршрутизатора Linux:

  eve-ng: ~ # mkdir / opt / unetlab / addons / qemu / linuxrouter-ubuntu.server.16.10
  

Помните, что имя каталога должно соответствовать соглашению об именах EVE-NG. Мы планируем создать собственный шаблон, который будет использовать имя «linuxrouter», поэтому имя каталога должно начинаться с суффикса «linuxrouter-». Вы можете выбрать другое имя, если хотите, но имя шаблона и суффикс имени каталога должны совпадать в соответствии с правильным соглашением об именах.

Предполагая, что вы назвали созданную виртуальную машину ubuntuserver , образ диска хранится на вашем портативном компьютере в каталоге $ HOME / vmware / ubuntuserver .Чтобы скопировать образ в виртуальную машину EVE-NG, откройте другое окно терминала на вашем главном компьютере и выполните в этом окне терминала следующую команду:

  t420: ~ $ scp $ HOME / vmware / ubuntuserver / ubuntuserver.vmdk [email protected]: //opt/unetlab/addons/qemu/linuxrouter-ubuntu.server.16.10
  

Преобразование образа диска VMware в образ диска QEMU

EVE-NG и UNetLab требуют, чтобы образы дисков были в формате QCOW2 и чтобы файл образа диска имел имя hda.qcow2 . Мы загрузили образ диска в формате VMware VMDK. Нам нужно его преобразовать.

Чтобы преобразовать образ диска VMDK в образ диска QCOW2, выполните следующие команды в окне терминала EVE-NG:

  eve-ng: ~ # cd /opt/unetlab/addons/qemu/linuxrouter-ubuntu.server.16.10
eve-ng: ~ # / opt / qemu / bin / qemu-img convert -f vmdk -O qcow2 ubuntuserver.vmdk hda.qcow2
eve-ng: ~ # / opt / unetlab / wrappers / unl_wrapper -a fixpermissions
eve-ng: ~ # rm ubuntuserver.vmdk
  

Теперь у нас есть файл с именем hda.qcow2 в каталоге изображений с именем linuxrouter-ubuntu.server.16.10 .

Создать новый файл шаблона

Каждый тип узла в EVE-NG имеет файл шаблона, который определяет параметры запуска узла, такие как имя узла, количество интерфейсов, какой гипервизор поддерживает узел, и параметры запуска, используемые гипервизором.

При создании нового пользовательского образа обычно проще всего создать t

.

Как превратить ваш ноутбук / настольный компьютер в сервер и разместить на нем веб-сайт, доступный через Интернет: Часть 2

Как преобразовать ваш ноутбук / настольный компьютер в сервер и разместить на нем веб-сайт, доступный через Интернет: Часть 2

Это часть 2 из цикла статей о размещении веб-сайта в Интернете на собственном ноутбуке. В части 1 мы разработали концепции структуры и функционирования Интернета. В этой части я проведу вас через процесс размещения и запуска веб-сайта в Интернете.

Вот демонстрация работающего сервера на моем ноутбуке:

https://janishar.com/

Ссылка на часть 1: НАЖМИТЕ ЗДЕСЬ

Я также создал БЕСПЛАТНЫЕ видеоуроки для понимания Интернета: Вот ссылка

Одна из важных концепций связи через Интернет — это порты. Итак, что такое порт?

Порт, о котором мы обычно слышали, используется для подключения монитора, веб-камеры, динамиков и т. Д. На физическом уровне порт компьютера — это специализированная розетка на устройстве, к которой подключается вилка или кабель.

Но порт, о котором мы говорим с точки зрения Интернета или программного обеспечения, имеет другое значение. В наборе интернет-протоколов порт является конечной точкой связи в операционной системе, в программном обеспечении — это логическая конструкция, которая идентифицирует конкретный процесс или тип сетевой службы.

Порт всегда связан с IP-адресом хоста и типом протокола связи и, таким образом, завершает сетевой адрес назначения или источника сеанса связи.Порт идентифицируется для каждого адреса и протокола 16-битным числом, обычно известным как номер порта . Например, адрес может иметь вид «протокол: TCP, IP-адрес: 1.2.3.4, номер порта: 80», что может быть записано как 1.2.3.4:80, если протокол известен из контекста.

В основном приведенный выше текст означает, что любая связь между сетевыми устройствами происходит через порт, который представляет собой программную конструкцию, которая помогает в приеме и обработке данных для сетевых устройств. Порт, который представляет собой номер после «:» в IP-адресе, определяет порт, на который должны быть отправлены данные.Мы, должно быть, видели номера портов в URL-адресах. По умолчанию HTTP использует порт 80, а HTTPS — порт 443, и мы не добавляем их в браузер, но неявно обрабатываются браузерами. Но такой URL-адрес, как http://www.example.com:8080/path/, указывает, что веб-браузер вместо этого подключается к порту 8080 HTTP-сервера.

Что такое переадресация портов?

Переадресация портов или сопоставление портов — это приложение трансляции сетевых адресов (NAT) , которое перенаправляет запрос связи с одного адреса и комбинации номера порта на другой, пока пакеты проходят через сетевой шлюз, например маршрутизатор или межсетевой экран.Этот метод чаще всего используется для того, чтобы сделать сервисы на хосте, находящемся в защищенной или замаскированной (внутренней) сети, доступными для хостов на противоположной стороне шлюза (внешней сети), путем переназначения IP-адреса назначения и номера порта связи на внутренний хост.

Это означает, что когда запрос поступает на маршрутизатор на определенный порт, он перенаправляет этот запрос на сервер в локальной сети маршрутизатора, чтобы иметь возможность его обработать (если настроено в настройках NAT).Таким образом, он работает как привратник.

IP-адрес веб-сервера в виде числа вроде 123.123.123.123, но как http://www.example.com может взаимодействовать с этим сервером?

example.com называется доменным именем. Доменные имена — это удобные для человека формы Интернет-адресов, которые обычно используются для поиска веб-сайтов. Система доменных имен (DNS) по сути является глобальной системой адресации. Это способ, которым доменные имена находятся и транслируются в адреса интернет-протокола (IP), и наоборот.Доменное имя, например example.com, представляет собой уникальный псевдоним IP-адреса http://123.123.123.123:80, который является реальной физической точкой в ​​Интернете. Интернет-корпорация по присвоению имен и номеров ( ICANN ) — это некоммерческая организация, отвечающая за координацию обслуживания и процедур нескольких баз данных, связанных с пространствами имен Интернета. Мы можем купить доменное имя, как я это сделал с janishar.com, у такого поставщика, как GoDaddy и другие, на некоторое время, а затем указать этому домену, чтобы он указывал на фактический адрес сервера, используя веб-сайты этих поставщиков.

Что такое публичный IP-адрес?

Общедоступный IP-адрес — это IP-адрес, который наш домашний или деловой маршрутизатор получает от вашего интернет-провайдера. Общедоступные IP-адреса требуются для любых общедоступных сетевых устройств, таких как наш домашний маршрутизатор, а также для серверов, на которых размещаются веб-сайты.

Общедоступные IP-адреса — это то, что отличает все устройства, подключенные к общедоступному Интернету. Каждое устройство, подключенное к Интернету, использует уникальный IP-адрес.Это адрес, который каждый интернет-провайдер использует для пересылки интернет-запросов в конкретный дом или офис.

Теперь мы разработали все концепции, необходимые для создания нашего собственного сервера для Интернета.

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

Получите доступ к программному обеспечению маршрутизатора с помощью браузера, введя его локальный IP-адрес. Вы можете найти локальный IP-адрес, используя параметр сведений о сети в подключении вашего ноутбука или используя netstat -rn на терминале Linux.Это адрес шлюза по умолчанию (у меня 192.168.1.1).

Укажите имя пользователя и пароль, которые обычно записываются в нижней части маршрутизатора или являются «admin» для обеих записей. Действия, которые вы предпримете, будут зависеть от марки и модели вашего маршрутизатора, но процесс будет более или менее одинаковым. Мой роутер в Тэнде .

На этом сайте представлены действия по переадресации портов для большинства маршрутизаторов: https://portforward.com/router.htm

Найдите свой маршрутизатор на этом сайте и выполните следующие действия.В этой статье я расскажу о настройках роутера Tenda.

Шаг 1: Найдите общедоступный IP-адрес маршрутизатора:

Дополнительно (вверху справа)> Информация об устройстве (верхнее левое меню)> Таблица статуса WAN > IP-адрес WAN

(если вы введете WAN IP-адрес , после чего вы увидите страницу входа в систему вашего маршрутизатора.)

Шаг 2: Освободите порты 80 и 443, если они используются в маршрутизаторе.

Это было сложнее для моего роутера.

Дополнительно (вверху справа, если нет)> Управление> Контроль доступа> AccessCtrl

Включить WAN для HTTP> Изменить порт на 8080> Отключить WAN для HTTP

Включить WAN для HTTPS> Изменить порт на 8081> Отключить WAN для HTTPS

Применить / сохранить

Шаг 3: Измените пароль маршрутизатора для безопасности

Дополнительно (вверху справа, если нет)> Управление> Контроль доступа> Пароли> Применить / сохранить

Шаг 4: Настройка NAT

Дополнительно ( вверху справа, если нет)> Расширенная настройка> NAT> Виртуальные серверы> Добавить

Custom Service:> введите имя> IP-адрес сервера:> добавьте IP-адрес портативного компьютера, который будет сервером (введите 192.168.1.250, и мы настроим этот IP-адрес вручную на ноутбуке)

Заполните запись в таблице следующим образом:

Начало внешнего порта> 80> конец внешнего порта> 80> Протокол> TCP> Начало внутреннего порта> 80> Внутренний порт Конец> 80> Применить / сохранить

Аналогичным образом добавьте еще одну запись NAT для 443, если вы хотите настроить HTTPS, как на моем сайте https://janishar.com.

Шаг 5: Ограничьте DHPC для выделения IP 192.168.1.250 любому другому устройству

ПРИМЕЧАНИЕ: Вы должны добавить 250 в качестве вашего хоста, если ваш шлюз по умолчанию — 192.168.0.1, затем используйте 192.168.0.250

Advanced (вверху справа, если его нет)> Advanced Setup> LAN> Enable DHCP Server> End IP Address> Enter 192.168.1.245> Apply / Save

Step 6: Setup 192.168.1.250 IP-адрес для подключения в Ubuntu или любой ОС, установленной на вашем ноутбуке.

Я скажу вам использовать графический интерфейс, так как он проще.

Соединение (верхний правый вариант)> Информация о соединениях> Оставьте его открытым для копирования и вставки

Соединение (верхний правый вариант)> Редактировать соединения> Ваше текущее имя соединения> Редактировать> Настройки IPv4> Добавить (если нет записи)

Адрес> 192.168.1.250> Скопируйте остаток из информации о подключениях> Сохранить

Теперь повторно подключите проводное соединение Wi-Fi или LAN.

Шаг 7. Запустите серверную программу на своем портативном компьютере.

Я использую Nginx. Вы можете запустить любую такую ​​программу, Apache, Tomcat и т. Д. Я не буду объяснять процесс их настройки в этой статье. Вы должны найти по ним соответствующее руководство и сделать это самостоятельно.

Для настройки Nginx вы можете обратиться: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04

Мой сервер Nginx прослушивает порт 80 и обслуживает статический веб-сайт, который вы можете увидеть здесь https: // janishar.com.

Для HTTPS я использовал Certbot. Ссылка для Nginx находится здесь: https://certbot.eff.org/#ubuntutrusty-nginx

Шаг 8: Укажите свой домен на свой общедоступный IP-адрес:

Когда вы вводите свой общедоступный IP-адрес в браузере, вы можете надеюсь увидеть ваш сайт, если все настроено правильно. Но мы хотим, чтобы такое имя, как janishar.com, могло легко получить к нему доступ в Интернете.

Купите домен у любого продавца, а затем поместите свой общедоступный IP-адрес в запись «A», и он будет доступен для пользователя в Интернете.

Вы можете увидеть мой действующий сайт https://janishar.com.

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

Coder’s Rock

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *