# Настройка сети

## Проброс данных из одного интерфейса в другой

На сервере имеются два сетевых интерфейса (две сетевые платы):

1. **eth0**
    - `address 10.100.0.12`
    - `netmask 255.255.254.0`
    - `gateway 10.100.1.254`
2. **eth1**
    - `address 172.16.0.1`
    - `netmask 255.255.255.0`
    - `gateway 172.16.0.1`

Клиентам из подсети `172.16.0.0` предоставить доступ к подсетям, лежащим за `10.100.1.254`.

(Debian/Ubuntu) Необходимо раскомментировать (добавить) параметр `net.ipv4.ip_forward=1` в файле `/etc/sysctl.conf`. Перезагрузиться.

Добавить статические маршруты для сетевого интерфейса `eth1`:

- Через редактирование `/etc/network/interfaces`

```sh
...
auto eth1
iface eth1 inet static
    address 172.16.0.1
    netmask 255.255.255.0
    up ip route add 10.100.0.0/23 via 10.100.1.254
    up ip route add 192.168.100.0/23 via 10.100.1.254
...
```

- Через `Network Manager`

```sh
nmcli connection modify eth1 +ipv4.routes "10.100.0.0/23 10.100.1.254"
nmcli connection modify eth1 +ipv4.routes "192.168.100.0/23 10.100.1.254"
```

- Через графический интерфейс

![network_01](img/network_01.png)

Добавить маскарадинг для трафика `eth0`:

```sh
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/24 -j MASQUERADE
```

Перезагрузить сетевые интерфейсы.

## Netplan

Настройка профиля [netplan](https://netplan.io/examples/) в файле `/etc/netplan/config.yaml`. В `Ubuntu` файл расположен `/etc/netplan/00-installer-config.yaml`

### Параметры `netplan`

- `renderer` - программа для обработки конфигурации (`networkd` или `NetworkManager`)
- `ethernets` - настройка сетевых адаптеров `ethernet`
- `wifis` - настройка беспроводных адаптеров
- `dhcp4` - получение IPv4 адреса по DHCP
- `dhcp6` - получение IPv6 адреса по DHCP
- `dhcp-identifier` - если передать значение "mac", то будет использоваться MAC-адрес в качестве идентификатора DHCP
- `addresses` - добавляет статические адреса к интерфейсу, можно несколько
- `gateway4` - указывает шлюз IPv4
- `gateway6` - указывает шлюз IPv6
- `nameservers` - указывает DNS-серверы
    - `search` - дописывает окончание домена, если происходит обращание к узлу сети только по его имени
- `macaddress` - устанавливает новый MAC-адрес
- `routes` - позволяет настроить маршруты таблицы маршрутизации
    - `to` - адрес/подсеть до которой необходим маршрут
    - `via` - шлюз через которой будет доступна подсеть
    - `on-link` - прописывать маршруты всегда при поднятии линка
- `routing-policy` - дополнительная настройка маршрутов, для IP или подсети
- `access-points` - список точек доступа для Wi-Fi
- `password` - пароль для точки доступа Wi-Fi
- `mode` - режим работы сетевой карты Wi-Fi

### Команды `netplan`

- `try` - попробовать применить конфигурацию с возможностью отмены
- `apply` - применить конфигурацию
- `generate` - проверка текущей конфигурации и запись на диск
- `config` - записать текущую конфигурацию сети в YAML

### Отладка `netplan`

- `--debug` - получение подробной информации при применении команд

Проверка конфигурационного файла на ошибки и создание файлов конфигурации для программы-обработчика:

```sh
sudo netplan --debug generate
```

Применение конфигурации:

```sh
sudo netplan --debug apply
```

### Перезагрузка сетевого интерфейса

Перезагрузка сетефого интерфейса в `Ubuntu`:

```sh
sudo systemctl restart systemd-networkd.service
```

В других дистрибутивах:

```sh
sudo systemctl restart networking
```
```sh
sudo /etc/init.d/networking restart
```

### Примеры `netplan`

Настройка сети, где `enp3s0`, `enp8s0` и `wlp3s0` - сетевые интерфейсы:

- `enp3s0` - динамическая адресация
- `enp8s0` - статическая адресация
- `wlp3s0` - беспроводное подключение

```sh
network:
    version: 2
    renderer: networkd
    ethernets:
        enp3s0:
            dhcp4: true
        enp8s0:
            addresses:
                - 10.10.10.2/24
            gateway4: 10.10.10.1
            nameservers:
                search: [mydomain, otherdomain]
                addresses: [10.10.10.1, 1.1.1.1]
            routes:
                - to: default
                  via: 10.10.10.1
    wifis:
        wlp3s0:
            dhcp4: no
            dhcp6: no
            addresses: [192.168.0.21/24]
            nameservers:
                addresses: [192.168.0.1, 8.8.8.8]
            access-points:
                "network_ssid_name":
                    password: "**********"
            routes:
                - to: default
                  via: 192.168.0.1
                  on-link: true
```
