Аналог ip unnumbered в Linux системах или экономим IP адреса

Не так давно я столкнулся с проблемой аналога ip unnumbered на Linux, которая с легкостью реализовывается на оборудование Cisco.
При использование такого вида маршрутизации, не придется делить сеть глобально маршрутизируемых ip адресов на небольшие с маской /30 или /31. Достаточно присвоить, например, интерфейсу loopback сеть класса C ( /24 ), а клиентским интерфейсам указать на то, что вся обработка IP пакетов будет осуществляется с адресом присвоенным loopback interface. Тем самым вы получаете рациональное использование IP адресов.
Рассмотрим теперь выше сказанное на практике.

Входные данные

  • Публичная сеть ip адресов класса C — 195.131.195.0/24 (маска подсети 255.255.255.0)
  • Cisco router 2811 series, с двумя Fast Ethernet интерфейсами.
  • Управляемый коммутатор L2, cisco catalyst 2950
  • Router на базе Debian 2.6.18
  • На Debian router, установлен пакет vconfig, который отвечает за создание VLAN. В качестве интерфейса, на котором будут создаватся VLAN выступает eth1

Постановка задачи

Необходимо создать 3 VLAN-а, для обслуживания трех абонентов и предоставить каждому по публичному IP адресу из сети 195.131.195.0/24.

Часть первая. Что бы вы сделали без ip unnumbered?

Чтобы мы сделали в таком случае, если бы не использовали ip unnumbered? Мы бы поделили нашу сеть на более мелкие, например, на сети с размерностью /30, тоесть маской подсети 255.255.255.252. И так, три клиента, три сети:
Сеть номер один: 195.131.195.0/30
Где: 195.131.195.0 – индификатор сети, 195.131.195.1 – IP, который выступает в роли шлюза для клиента, 195.131.195.2 – клиентский IP адрес и 195.131.195.3 – broadcast. По этой же аналогии разбиваем оставшиеся две сетки и получаем:
Сеть номер два: 195.131.195.4/30
Сеть номер три: 195.131.195.8/30
Теперь создаем конфиг на cisco router:

 interface FastEthernet0/1.200
 description Client-1 // описание интерфейса для первого клиента
 encapsulation dot1Q 200 // используем dot1Q выставляя таким образом VID для VLAN
 ip address 195.131.195.1 255.255.255.252 // присваиваем IP
 !
 interface FastEthernet0/1.201
 description Client-2 // описание интерфейса для воторого клиента
 encapsulation dot1Q 201
 ip address 195.131.195.5 255.255.255.252 // присваиваем IP
 !
 interface FastEthernet0/1.202
 description Client-3 // описание интерфейса для первого клиента
 encapsulation dot1Q 202 // используем dot1Q выставляя таким образом VID для VLAN
 ip address 195.131.195.9 255.255.255.252 // присваиваем IP
 !

Конфиг для Cisco готов. Создадим похожую схему только уже на Debian router, для этого отредактируем файл /etc/network/interfaces

 ## Client 1
 auto vlan200
 iface vlan200 inet static
 address 195.131.195.1
 netmask 255.255.255.252
 vlan_raw_device eth1

## Client 2
 auto vlan201
 iface vlan201 inet static
 address 195.131.195.5
 netmask 255.255.255.252
 vlan_raw_device eth1

## Client 3
 auto vlan202
 iface vlan202 inet static
 address 195.131.195.9
 netmask 255.255.255.252
 vlan_raw_device eth1

Подготовим коммутатор, к которому будут подключены наши виртуальные клиенты:
1 порт на коуммутаторе будет стоять в режиме switchport access vlan 200
2 порт — switchport access vlan 201
3 порт — switchport access vlan 202

Все работает.

Часть вторая. Переводим нашу схему на ip unnumbered.

Для этого сделаем следующие изменения на cisco router. Повесим нашу публичную сеть на loopback 200, следующим образом:

 interface Loopback200
 ip address 195.131.195.1 255.255.255.0
 no ip redirects

Теперь поправим клиентские интерфейсы

 interface FastEthernet0/1.200
 description Client-1
 encapsulation dot1Q 200
 ip unnumbered Loopback200 // указываем на loopback 200, где висит наша сеть
 ip virtual-reassembly // сбор фрагментов
 !
 interface FastEthernet0/1.201
 description Client-2
 encapsulation dot1Q 201
 ip unnumbered Loopback200 // указываем на loopback 200, где висит наша сеть
 ip virtual-reassembly // сбор фрагментов
 !
 interface FastEthernet0/1.202
 description Client-3
 encapsulation dot1Q 202
 ip unnumbered Loopback200 // указываем на loopback 200, где висит наша сеть
 ip virtual-reassembly // сбор фрагментов

И заключительный этап. Нам необходимо выдернуть всего один IP из нашей большой сети и предоставить клиенту. Сделаем это с помошью ip route:

 ip route 195.131.195.2 255.255.255.255 FastEthernet0/1.200 // для клиента номер 1
 ip route 195.131.195.3 255.255.255.255 FastEthernet0/1.201 // для клиента номер 2
 ip route 195.131.195.4 255.255.255.255 FastEthernet0/1.202 //для клиента номер 3

Теперь для клиентов, необходимы настройки выходна в Internet: IP: 195.131.195.X, MASK: 255.255.255.0, а основной шлюз 195.131.195.1.
Почувствовали разницу? =)
А что же делать с нашим Debian router? Все просто. Изменим наш конфиг следующим образом. А вот что.
Создадим lo1 и повесим на него нашу публичную сеть.

 auto lo1
 allow-hotplug lo1
 iface lo1 inet static
 address 195.131.195.1
 netmask 255.255.255.0
 network 195.131.195.0

Теперь поправим клиентские VLAN сделующим образом:

 ## Client 1
 auto vlan200
 iface vlan200 inet static
 address 0.0.0.0
 netmask 0.0.0.0
 vlan_raw_device eth1

## Client 2
 auto vlan201
 iface vlan201 inet static
 address 0.0.0.0
 netmask 0.0.0.0
 vlan_raw_device eth1

## Client 2
 auto vlan202
 iface vlan202 inet static
 address 0.0.0.0
 netmask 0.0.0.0
 vlan_raw_device eth1

И воспользуемся ip route:

 ip ro add 195.131.195.2 dev vlan200 src 195.131.195.1 // Клиент номер 1
 ip ro add 195.131.195.3 dev vlan200 src 195.131.195.1 // Клиент номер 2
 ip ro add 195.131.195.4 dev vlan200 src 195.131.195.1 // Клиент номер 3

Вот и все.