Сетевой уровень: настройка, DHCP и целевая маршрутизация

Настройки

Простой случай: ip a + ip r на каждом интерфейсе

Сохранение настроек: команды+данные (etcnet, network-scripts и т. п.) или спецAPI+данные (Network Manager). Достоинства и недостатки.

Устройство etcnet: ifaces  options.d  scripts  sysctl.conf

Функции маршрутизатора (ip_forward):

DHCP

PXE = tftp + bootp (возможны девиации)

ISC DHCPD и его настройка:

[root@uneex ~]# cat /etc/dhcp/dhcpd.conf
# See dhcpd.conf(5) for further configuration

ddns-update-style none;

subnet 10.30.50.0 netmask 255.255.255.0 {
        option routers                  10.30.50.1;
        option subnet-mask              255.255.255.0;

        option domain-name              "class.altlinux.org";
        option domain-name-servers      10.30.50.1;

        range dynamic-bootp 10.30.50.10 10.30.50.100;
        default-lease-time 21600;
        max-lease-time 43200;
}

Целевая маршрутизация

Особые случаи маршрутизации:

Policy routing:

[root@uneex ~]# ip r
default via 10.0.2.2 dev enp0s3  metric 203
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15  metric 203
10.30.50.0/24 dev enp0s8  proto kernel  scope link  src 10.30.50.1
[root@uneex ~]# ip r list table local
broadcast 10.0.2.0 dev enp0s3  proto kernel  scope link  src 10.0.2.15
local 10.0.2.15 dev enp0s3  proto kernel  scope host  src 10.0.2.15
broadcast 10.0.2.255 dev enp0s3  proto kernel  scope link  src 10.0.2.15
broadcast 10.30.50.0 dev enp0s8  proto kernel  scope link  src 10.30.50.1
local 10.30.50.1 dev enp0s8  proto kernel  scope host  src 10.30.50.1
broadcast 10.30.50.255 dev enp0s8  proto kernel  scope link  src 10.30.50.1
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1

Пример правил:

# ip rule
 0:      from all lookup local
 32766:  from all lookup main
 32767:  from all lookup default

# echo $TBL $TNAME >> /etc/iproute2/rt_tables
# ip rule add from $IP table $TBL # или $TNAME
# ip route add default dev $ETH via $GW table $TBL
# ip route add $NET dev $ETH table $TBL

«Russian VPN»

Д/З

Внимание: образы виртуальных машин обновились! Теперь их два — сервер (Nano) и клиент (NanoClient). Импортировать нужно обе.

Если вы не большой знаток Linux, редактировать конфигурационные файлы можно с помощью команды mcedit /путь/до/файла. Если вы знакомы с двухпанельными файловыми менеджерами типа «синенькое» (Far Manager, Total Commander и т. п.), можете воспользоваться mc. Символ # в начале строки конфигурационного файла начинает комментарий.

Обе машины — и «сервер», и «клиент» — имеют по два сетевых интерфейса, из которых один смотрит в «интернет» 10.0.2.0/24 (что это за интернет — об этом после), а второй — в невидимую ниоткуда, кроме виртуальных машин, внутреннюю сеть virtualbox 10.30.50.0/24 (очень удобно: внутренних сетей можно наделать сколько хочешь и моделировать любую топологию сети). Различаются только настройки: сервер по умолчанию ходит в интернет через интерфейс с интернетом, а клиент — через внутреннюю сеть посредством сервера.

Сам virtualbox может раздавать сетевые настройки при помощи DHCP, но этим пользуется только сервер (для «интенрентого» интерфейса). Внутренний интерфейс 10.30.50.1/24 в сервере настроен вручную, и по внутренней сети уже сам сервер раздаёт DHCP, а клиент — получает. Адрес 10.0.2.10/24 на «интернетном» интерфейса клиент настраивает вручную.

Разумеется, при такой конфигурации клиент тоже может работать маршрутизатором для сервера!

Если в примере встречаются команды и клиента, и сервера, я включаю в него приглашение командной строки с именем машины.