Сервер Ubuntu 18.04.1 Netplan и UFW

Хорошо, таким образом, я хочу сделать маршрутизатор с помощью Сервера Ubuntu 18.04 (уже имеют аппаратные средства, и все это работает, у меня в настоящее время есть IPfire на нем). Я посмотрел на все дистрибутивы маршрутизатора, и они кажутся скорее ограниченными в объеме.

Источники

Статья: https://arstechnica.com/gadgets/2016/04/the-ars-guide-to-building-a-linux-router-from-scratch/

Руководство брандмауэра: https://help.ubuntu.com/lts/serverguide/firewall.html

Сервер Ubuntu теперь использует netplan. Я посмотрел на документацию, и довольно ясно, что я не точно квалифицирован в этом использовании ОС. Я надеялся, возможно, что кто-то мог помочь мне “перевести” способ, которым эта статья делает это (способ, которым я более знаком) в более современную реализацию.

Как я сделал бы netplan версию из этого?

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The WAN interface, marked Lan1 on the case
auto p4p1
iface p4p1 inet dhcp

# The LAN interface, marked Lan2 on the case
auto p1p1
iface p1p1 inet static
    address 192.168.99.1
    netmask 255.255.255.0

Кроме того, я предпочел бы использовать UFW, непосредственно использующий iptables, поскольку большинство правил в UFW также, что говорит большая часть статьи. Одно основное отличие от статьи, у него есть это для раздела NAT.

От статьи

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# p4p1 is WAN interface, #p1p1 is LAN interface
-A POSTROUTING -o p4p1 -j MASQUERADE

COMMIT

От руководства брандмауэра

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

# don’t delete the ‘COMMIT’ line or these nat table rules won’t be processed
COMMIT

Но, после того, как я выясняю те два раздела. Я должен смочь обработать остальных. Любая справка была бы большой!

1
задан 1 August 2018 в 04:26

2 ответа

Согласно моим комментариям - я не использовал бы netplan здесь. Его превосходное, пока Вы не пытаетесь образовать мост и я не мог заставить это работать надежно. IMO не готовый. С 18,04 переключения назад на классика ifup управление сетью является умной вещью сделать.

Я не использую ufw в моей собственной сборке, но не может случиться так что трудно перевести их (известные последние слова).

firewalld использует удивительно подобные команды для них, и они должны перевести непосредственно в UFW. Команды являются буквально "классическими" командами брандмауэра. Они не тестируются на ufw, и, возможно, нуждался бы в некоторой настройке от кого-то, кто использует ufw.

Мне действительно не нравится как ufw примечания дают диапазон дюйм/с по интерфейсу (хотя Вы могли бы быть вынуждены к), но он должен перевести во что-то вроде этого. enp1s0 мой 'внешний' интерфейс, и br0 является в основном всеми моими другими интерфейсами, соединенными мостом вместе

Для ссылки, моего firewalld установка похожа на это:

sudo firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o  enp1s0 -j MASQUERADE
sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o  enp1s0 -j ACCEPT
sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo firewall-cmd --runtime-to-permanent

Предпоследняя команда очень важна

И это должно перевести во что-то вроде этого.

#masquerade traffic coming out from enp1s0 
-A POSTROUTING 0 -o  enp1s0 -j MASQUERADE
# Forward and accept any traffic from br0 to enp1s0  
-A FORWARD 0 -i br0 -o  enp1s0 -j ACCEPT
#accept traffic on existing connections
-A FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Значение по умолчанию netplan конфигурация, как я вспоминаю, дает всем выводам автоматические IP-адреса.

Это будет проблемой в конечном счете при выполнении сервера DHCP. Вы хотите статический IP-адрес в том интерфейсе.

Если Вы должны, минимальная конфигурация netplan быть похожими на это - я думаю, что она работала, прежде чем я пытался соединить вещи мостом.

  • enp1s0 является моим внешним интерфейсом
  • enp1s0 является внутренним.

Я не совсем уверен, почему enp2s0 имеет включенный dhcp - Вы смогли удалять ту строку файла конфигурации. Дополнительный полезно, так как Вам нельзя было бы всегда включать что-то порт

network:
    ethernets:
        enp1s0:
            addresses: []
            dhcp4: true
        enp2s0:
            addresses: 
                - 192.168.2.1/24
            dhcp4: true
            optional: true
    version: 2
2
ответ дан 3 December 2019 в 06:51

Полный Кредит переходит в: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server-18-04-1-lts-bionic-beaver/

Я предположу для следующего, что Вы просто установили Ubuntu 18.04 и ничего еще не сделали с нею.

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

sudo ufw enable

1. Установите сетевые интерфейсы

Во-первых, мы должны настроить сетевые интерфейсы, которые мы будем использовать. WAN (enp0s7) – этот интерфейс получит IP от ISP, таким образом, мы оставим его с помощью DHCP.

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

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

Давайте откроем его с нано:

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

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

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s7:
            dhcp4: true
        enp3s0f0:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.4.4
                search: []
    version: 2

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

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

sudo netplan generate
sudo netplan apply

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

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

sudo apt-get install isc-dhcp-server

Затем мы должны отредактировать/etc/default/dhcpd.conf файл. Это говорит сервер DHCP, какой сетевой интерфейс это должно слушать. В моем случае это, конечно, enp3s0f0, интерфейс LAN.

Мы вводим команду:

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

И редактирование соответственно, в моем случае это:

INTERFACES="enp3s0f0"

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

sudo nano /etc/dhcp/dhcpd.conf

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

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

Если все правильно настраивается, должна быть строка, говоря “АКТИВНЫЙ “. Иначе Вы испортили что-то в/etc/dhcp/dhcpd.conf файле. Это может пропускать некоторую точку с запятой или скобку.

3. КОНФИГУРИРОВАНИЕ БРАНДМАУЭРА

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

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

sudo nano /etc/rc.local

Затем, скопировать/вставить следующий сценарий. Существуют комментарии, объясняющие каждое правило iptables. Можно удалить их, при необходимости но Вы не должны удалять #!/bin/bash. Кроме того, изменение enp0s7 и enp3s0f0, если Ваши сетевые интерфейсы имеют некоторые различные имена.

#!/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 enp3s0f0 -j ACCEPT

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

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

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

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

# rc.local needs to exit with 0
exit 0

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

sudo chmod 755 /etc/rc.local

Настройки по умолчанию на брандмауэре UFW смешивают с нашей конфигурацией, и для нашего маршрутизатора для работы правильно (для передачи пакетов от WAN до LAN), необходимо включить следующий параметр внутри/etc/ufw/sysctl.conf файл. Мы выполняем команду:

sudo nano /etc/ufw/sysctl.conf

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

net/ipv4/ip_forward=1 

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

2
ответ дан 3 December 2019 в 06:51

Другие вопросы по тегам:

Похожие вопросы: