Хорошо, таким образом, я хочу сделать маршрутизатор с помощью Сервера 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
Но, после того, как я выясняю те два раздела. Я должен смочь обработать остальных. Любая справка была бы большой!
Согласно моим комментариям - я не использовал бы 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 быть похожими на это - я думаю, что она работала, прежде чем я пытался соединить вещи мостом.
Я не совсем уверен, почему enp2s0 имеет включенный dhcp - Вы смогли удалять ту строку файла конфигурации. Дополнительный полезно, так как Вам нельзя было бы всегда включать что-то порт
network:
ethernets:
enp1s0:
addresses: []
dhcp4: true
enp2s0:
addresses:
- 192.168.2.1/24
dhcp4: true
optional: true
version: 2
Полный Кредит переходит в: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server-18-04-1-lts-bionic-beaver/
Я предположу для следующего, что Вы просто установили Ubuntu 18.04 и ничего еще не сделали с нею.
sudo ufw enable
Во-первых, мы должны настроить сетевые интерфейсы, которые мы будем использовать. 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
Затем, мы хотим настроить сервер 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 файле. Это может пропускать некоторую точку с запятой или скобку.
Чтобы иметь функциональный маршрутизатор, мы должны настроить брандмауэр правильно. Это сделано путем записи некоторых правил 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 команду перезагрузки для перезагрузки сервера.