Как назначить несколько IP-адресов одной сетевой карте в Linux

Некоторым из вас может быть интересно, зачем назначать несколько IP-адресов одной сетевой карте. На то может быть много причин. Например, вам необходимо провести определенное тестирование на вашем Linux-компьютере, которое требует двух или более сетевых карт. Вы пойдете, специально для этого, покупать новые сетевые карты? Нет, покупать дополнительные сетевые карты не обязательно. Вы можете установить несколько IP-адресов из разных диапазонов, например, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24 и т.д., для сетевой карты и использовать их все одновременно. Этот метод может быть полезен при настройке серверов общего доступа в Интернет, таких как прокси-сервер Squid. Если вы когда-нибудь окажетесь в ситуации, когда это вам понадобится, просто следуйте этой статье.

Этот пункт статьи был проверен на сервере Ubuntu 16.04 LTS. Однако это будет работать и на Debian, и на других системах на основе DEB, таких как Linux Mint, Elementary OS и т.д.

Мы можем найти IP-адрес в Ubuntu с помощью команды:

# ifconfig

(в старых системах)

или

# ip addr

(в новых системах)

Пример вывода:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:12:f8:c1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.105/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe12:f8c1/64 scope link 
 valid_lft forever preferred_lft forever

Как видно из приведенного примера IP-адрес сетевой карты enp0s3 имеет значение 192.168.1.105.

Мы назначили сетевой карте IP класса A, то есть из сети 192.168.1.0/24. Что делать, если нам необходим адрес в другой сети, например, в 192.168.2.0/24?

Просто введите следующую команду, чтобы установить дополнительный IP-адрес:

# ip addr add 192.168.2.105/24 dev enp0s3

Здесь 24 указывает на маску сети, т.е. 255.255.255.0.

Теперь давайте проверим, был ли назначен новый IP или нет.

# ip addr

Пример вывода

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:12:f8:c1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.105/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.105/24 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe12:f8c1/64 scope link 
 valid_lft forever preferred_lft forever

Как видно из вышеприведенного вывода, сетевая карта теперь имеет два IP-адреса: 192.168.1.105 и 192.168.2.105. Точно так же вы можете назначить столько IP-адресов, сколько хотите, например, 192.168.3.105, 192.168.4.105 и т.д.

Давайте пропингуем новый IP-адрес:

# ping -c 3 192.168.2.105

Пример вывода

PING 192.168.2.105 (192.168.2.105) 56(84) bytes of data.
64 bytes from 192.168.2.105: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 192.168.2.105: icmp_seq=2 ttl=64 time=0.067 ms
64 bytes from 192.168.2.105: icmp_seq=3 ttl=64 time=0.066 ms

--- 192.168.2.105 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.040/0.057/0.067/0.015 ms

И как говаривал кот Матроскин - «Заработало!!!»

Подождите, но это еще не конец. Пока то что мы сделали, это присвоили новый временный IP. После перезагрузки системы новый IP исчезнет. Как сделать этот IP постоянным? Это тоже просто.

Назначаем несколько IP-адресов навсегда:

Редактируем файл /etc/network/interfaces:

# nano /etc/network/interfaces

Теперь добавьте дополнительный IP-адрес, как показано ниже:

  iface enp0s3 inet static
  address 192.168.2.105/24

Сохраните и закройте файл.

Выполните следующую команду, чтобы изменения вступили в силу.

# ifdown enp0s3 && sudo ifup enp0s3

Пример вывода данной команды:

Killed old client process
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enp0s3/08:00:27:12:f8:c1
Sending on LPF/enp0s3/08:00:27:12:f8:c1
Sending on Socket/fallback
DHCPRELEASE on enp0s3 to 192.168.1.1 port 67 (xid=0xe3877d4)
RTNETLINK answers: Cannot assign requested address
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enp0s3/08:00:27:12:f8:c1
Sending on LPF/enp0s3/08:00:27:12:f8:c1
Sending on Socket/fallback
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0x3080e44d)
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 7 (xid=0x3080e44d)
DHCPREQUEST of 192.168.1.105 on enp0s3 to 255.255.255.255 port 67 (xid=0x4de48030)
DHCPOFFER of 192.168.1.105 from 192.168.1.1
DHCPACK of 192.168.1.105 from 192.168.1.1
bound to 192.168.1.105 -- renewal in 42937 seconds.

Теперь давайте запустим следующую команду, чтобы проверить, был ли назначен новый IP-адрес или нет.

# ip addr

Пример вывода

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:12:f8:c1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.105/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.105/24 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe12:f8c1/64 scope link 
 valid_lft forever preferred_lft forever

Также вы можете проверить это после перезагрузки системы. Вы увидите, что новый IP по прежнему назначен.

Этот пункт статьи был проверен на CentOS 7 64-разрядной версии сервера. Однако те же шаги должны работать на других системах на основе RPM, таких как Fedora, Red Hat Linux и Scientific Linux.

Просто введите следующую команду, чтобы временно добавить дополнительный IP-адрес:

$ sudo ip addr add 192.168.2.150/24 dev enp0s3

Вы можете сразу начать использовать новый IP.

Чтобы добавить постоянный IP-адрес, просто измените файл конфигурации сетевой карты от имени пользователя root:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

Добавьте новый IP-адрес, как показано ниже:

IPADDR1="192.168.2.150"

Для третьего IP-адреса добавьте строку IPADDR2=«192.168.2.150». Вы можете добавить любое количество IP-адресов один за другим.

Сохраните и закройте файл.

Перезапустите сетевой сервис с помощью команды:

# systemctl restart network

Проверьте новый IP-адрес, используя команду:

# ip addr

Пример вывода команды:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.150/24 brd 192.168.2.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link 
 valid_lft forever preferred_lft forever

Аналогичным образом добавьте столько IP-адресов, сколько необходимо.

Существует пять классов доступных диапазонов IP, а именно: класс A, класс B, класс C, класс D и класс E. Обычно используются классы A, B и C.

Класс сети Диапазон адресов Поддерживает
Класс A 1.0.0.1 - 126.255.255.254 16 миллионов хостов в каждой из 127 сетей.
Класс B 128.1.0.1 - 191.255.255.254 65 000 хостов в каждой из 16 000 сетей.
Класс С 192.0.1.1 - 223.255.254.254 254 хоста в каждой из 2 миллионов сетей.
Класс D 224.0.0.0 - 239.255.255.255 Мультикаст
Класс E 240.0.0.0 - 254.255.255.254 Зарезервировано для будущего использования или для целей исследований и разработок.

Как вы могли заметить, в этой статье мы использовали адреса сетей класса C.

Попробуем назначить IP-адрес из другого класса сетей , например, из диапазона класса A. Возможно ли это? Конечно да.

Просто добавьте выбранный IP-адрес в файл конфигурации сетевой карты.

В системах на базе DEB отредактируйте файл /etc/network/interfaces

$ sudo nano /etc/network/interfaces

Добавьте дополнительный IP-адрес:

  iface enp0s3 inet static
  address 10.0.0.105/16

Сохраните и закройте файл.

Выполните следующую команду, чтобы изменения вступили в силу:

$ sudo ifdown enp0s3 && sudo ifup enp0s3

Проверьте, был ли добавлен новый IP, используя команду:

$ ip addr

Пример вывода команды

Пропингуем новый IP-адрес:

$ sudo ping -c 3 10.0.0.105

Пример вывода

PING 10.0.0.105 (10.0.0.105) 56(84) bytes of data.
64 bytes from 10.0.0.105: icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from 10.0.0.105: icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from 10.0.0.105: icmp_seq=3 ttl=64 time=0.055 ms

--- 10.0.0.105 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.042/0.055/0.070/0.014 ms

Таким образом, мы можем добавить несколько IP-адресов к одной сетевой карте в Ubuntu, Debian и их производных, таких как Linux Mint, Elementary OS и т.д.

Отредактируем файл конфигурации сетевой карты:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

Добавим новый IP-адрес, как показано ниже. Обратите внимание, что вы должны добавить правильный префикс (маску сети) для каждого диапазона IP-адресов необходимого класса.

Давайте добавим IP-адрес из сети класса А, например 10.0.0.150.

IPADDR2="10.0.0.150"
[...]
PREFIX2=16

Убедитесь, что номер IPADDR (IPADDR2) и номер PREFIX (PREFIX2) одинаковы для каждой сети ..0.150.

Сохраните и закройте файл. Перезапустите сетевой сервис, чтобы изменения вступили в силу.

# systemctl restart network

Проверьте новый IP с помощью команды:

# ip addr

Пример вывода команды

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.150/24 brd 192.168.255.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 10.0.0.150/16 brd 10.255.255.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link 
 valid_lft forever preferred_lft forever

Пропингуем новый IP:

# ping -c 3 10.0.0.150

Пример вывода

PING 10.0.0.150 (10.0.0.150) 56(84) bytes of data.
64 bytes from 10.0.0.150: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 10.0.0.150: icmp_seq=2 ttl=64 time=0.100 ms
64 bytes from 10.0.0.150: icmp_seq=3 ttl=64 time=0.105 ms

--- 10.0.0.150 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.097/0.100/0.105/0.012 ms

Новый IP-адрес добавлен, и он работает. Не нужно покупать новую карту, делать сложные настройки маршрутизатора или что-то еще. Используя этот метод, мы можем легко добавить несколько разных IP за считанные минуты.