Настройка сети — это один из важнейших навыков системного администрирования, и в этой статье мы научимся настраивать сеть на Debian 11.
Получение информации о сетевых интерфейсах
В этой статье будем использовать утилиту sudo для административных действий.
Определить какие интерфейсы есть у вашего сервера поможет утилита lshw. Но её предварительно нужно установить:
$ sudo apt install lshw
Эта утилита предназначена для определения железа вашего сервера. Например, с её помощью можно посмотреть какой на сервере процессор или оперативная память. Сейчас нам нужно получить информацию по сетевым интерфейсам, для этого используя параметр -С network
:
$ sudo lshw -C network *-network description: Ethernet controller product: Virtio network device vendor: Red Hat, Inc. physical id: 12 bus info: pci@0000:00:12.0 version: 00 width: 64 bits clock: 33MHz capabilities: msix bus_master cap_list rom configuration: driver=virtio-pci latency=0 resources: irq:11 ioport:e0a0(size=32) memory:fea52000-fea52fff memory:fe408000-fe40bfff memory:fea00000-fea3ffff *-virtio2 description: Ethernet interface physical id: 0 bus info: virtio@2 logical name: ens18 serial: 2a:75:9e:4d:1d:fa capabilities: ethernet physical configuration: autonegotiation=off broadcast=yes driver=virtio_net driverversion=1.0.0 ip=192.168.0.30 link=yes multicast=yes
Из этого вывода вы можете получить следующую информацию:
- имя сетевого интерфейса — logical name: ens18;
- mac-адрес — serial: 2a:75:9e:4d:1d:fa;
- ip-адрес — ip=192.168.0.30;
- драйвер — driver=virtio_net;
- и другое.
Утилита lshw в основном используется, чтобы узнать имя и возможности сетевой карты. А для получения информации о mac и ip адресах нужно использовать другую утилиту — ip. Эта утилита командной строки не так проста, команда ip имеет множество подкоманд. Например подкоманда address — означает, что работать мы будем с ip-адресами. У подкоманды address, тоже есть свои подкоманды, например подкоманда show покажет информацию о назначенных ip-адресах. В самом конце команды можно указать имя сетевого интерфейса, чтобы получить информацию только по нему, а не по всем сетевым интерфейсам в системе.
Все эти подкоманды можно сокращать, например address = addr, show = sh. Но пока не будем этого делать, так как вначале нужно их запомнить.
Для того чтобы посмотреть, какие настройки использует сетевой интерфейс ens18 выполним команду ip address show ens18
:
$ ip address show ens18 2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 2a:75:9e:4d:1d:fa brd ff:ff:ff:ff:ff:ff altname enp0s18 inet 192.168.0.30/24 brd 192.168.0.255 scope global dynamic ens18 valid_lft 258476sec preferred_lft 258476sec
Здесь мы видим mac и ip адрес с маской подсети. Этот ip адрес был получен по dhcp.
Настройка IP адреса
Чтобы изменить ip адрес на какой-нибудь другой, нужно отредактировать конфигурационный файл «/etc/network/interfaces». Но вначале глянем на текущий блок настроек для интерфейса ens18:
$ cat /etc/network/interfaces allow-hotplug ens18 iface ens18 inet dhcp
- allow-hotplug ens18 — разрешает горячее подключение для интерфейса ens18. То-есть, указывает, что интерфейс должен автоматически включаться при его обнаружении (например, при подключении сетевого кабеля).
- iface ens18 inet dhcp — интерфейс ens18 будет получать настройки с помощью dhcp.
Чтобы назначить статический ip адрес нужно отредактировать этот блок в файле:
$ sudo nano /etc/network/interfaces allow-hotplug ens18 iface ens18 inet static address 192.168.0.30/24 gateway 192.168.0.1
То есть меняем dhcp на static и ниже указываем адрес интерфейса (address) и адрес шлюза по умолчанию (gateway).
Дальше нужно перезагрузить сетевую подсистему чтобы применились изменения. Для этого можно воспользоваться следующими командами:
- $ sudo systemctl restart networking.service — перезагружает службу отвечающую за сеть на сервере, но если сетевых интерфейсов несколько, то все они на время окажутся недоступными. Также эта команда у меня не всегда срабатывала, то есть после перезапуска службы, интерфейс оказывался без назначенного ip адреса. Поэтому я не рекомендую этот способ.
- $ sudo ifdown ens18; sudo ifup ens18 — это две команды, которые выполнятся по очереди. Первая команда (ifdown ens18) отключит сетевой интерфейс, а вторая (ifup ens18) включит. Эта команда меня ещё не подводила.
- $ sudo reboot — эта команда перезагрузит сервер полностью. После чего сервер загрузится уже с новыми сетевыми настройками.
Настройка DNS сервера
Чтобы указать серверу, какой ему использовать dns сервер, нужно редактировать конфигурационный файл /etc/resolv.conf. Давайте взглянем на него:
$ cat /etc/resolv.conf nameserver 192.168.0.1
Этот адрес был получены от dhcp сервера. Но его можно изменить прям в этом файле:
$ sudo nano /etc/resolv.conf nameserver 77.88.8.8
После редактирования этого файла ничего перезагружать не нужно, настройки подхватятся на лету. Проверить это можно с помощью команды nslookup, которая определит ip адрес по имени используя указанный dns сервер.
$ nslookup ya.ru Server: 77.88.8.8 Address: 77.88.8.8#53 Non-authoritative answer: Name: ya.ru Address: 87.250.250.242 Name: ya.ru Address: 2a02:6b8::2:242
Как видим, был использован dns от Яндекса — 77.88.8.8. Именно его мы внесли в конфиг /etc/resolv.conf.
Утилита IP
Теперь более подробно разберем утилиту ip.
Работая с ней вы используете различные подкоманды. Все их рассматривать не будем. Разберём лишь некоторые из них:
- address — позволяет назначать и удалять ip адреса, просматривать их и тому подобное.
- link — можно включить или выключить сетевой интерфейс, посмотреть список интерфейсов и их mac адреса.
- neigh — можно добавить или удалить mac адрес из arp таблицы, или полностью её очистить.
- route — позволяет создавать новые маршруты и удалять их, а также просматривать уже созданные маршруты.
У этих подкоманд есть свои подкоманды. Например, чтобы посмотреть информацию используется общая подкоманда show:
# ip address show - посмотреть ip адреса # ip link show - посмотреть физические устройства # ip neigh show - посмотреть arp таблицу # ip route show - посмотреть таблицу маршрутизации
Во всех случаях можно указывать конкретный интерфейс:
# ip address show ens18
Помимо просмотра информации можем настраивать сеть, например можно добавить или удалить ip адрес на интерфейсе. Но в отличии от правки конфига, изменённый ip адрес этим способом будет действовать только до перезагрузки сервера:
# ip address add 192.168.0.44/24 dev ens18 - добавить ip для ens18 # ip address del 192.168.0.44/24 dev ens18 - удалить ip для ens18
Также можем добавлять или удалять маршруты. Такие маршруты тоже будут действовать только до перезагрузки сервера:
# ip route add 192.168.5.0/24 via 192.168.0.10 - добавить маршрут # ip route delete 192.168.5.0/24 - удалить маршрут
Можем включать и выключать сетевые интерфейсы:
# ip link set ens18 up - включить # ip link set ens18 down - выключить
Кстати, выключение и включение сетевых интерфейсов с помощью ip link set не перечитывают настройки из /etc/network/interfaces, поэтому если вы что-то там изменили, то выполняйте ifdown и ifup.
Можем очистить arp таблицу:
# ip neigh flush
Если хотите, можете почитать мануал по команде ip. На русском языке он доступен тут.
Добавление статических маршрутов
Чтобы добавленный маршрут остался после перезагрузки его нужно вписать в уже знакомый файл /etc/network/interfaces в таком виде:
up ip route add 192.168.5.0/24 via 192.168.0.10
То есть в конце файла, с новой строки пишите up, а дальше команду с помощью которой вы создаете маршрут.
Вам может быть интересна статья — Настройка сети на Ubuntu.
Если тебе понравилась эта статья, подпишись на мой канал в VK.
up ip route add 192.168.5.0/24 via 192.168.0.10
Здесь нет ошибки? Сеть 192.168.5.0/24 через 192.168.0.10.
Это ведь разные сети. Маска 255.255.255.0 адрес 192.168.0.10
Здесь нет ошибки. Здесь имеется ввиду что к сети 192.168.5.0/24 (которой нет на сервере) нужно идти через роутер 192.168.0.10. Сервер при этом должен сам быть в сети 192.168.0.0/24 (в одной сети с роутером). И роутер уже должен знать про 192.168.5.0/24. Я в процессе написания статьи менял сети, это может путать, поправлю.