Сразу скажу, что на написание поста меня вдохновила аналогичная статья, опубликованная на Хабре еще в 2009 году. Поэтому я не буду пересказывать ее содержимое и приводить конфигурацию Cisco-девайсов.
Сегодня, когда IPv4-адреса стали еще большим дефицитом, чем автомобиль «Москвич» во времена СССР, выделять клиенту сеть /30 или /31 — это преступление. В Cisco для обхода этих проблем есть режим «ip unnumbered», позволяющий назначить клиенту единственный адрес, не расходуя адреса впустую. Давайте посмотрим как это делается в Mikrotik RouterOS. Представим такую (сильно упрощенную) схему:
Наш шлюз (provider-gw) подключен интерфейсом ether1 к интернету посредством BGP (или другим способом, это не важно) и у нас есть собственная «большая» публичная сеть, например — 123.45.60.0/22. Первый клиент подключен к VLAN-интерфейсу vlan100, который, предположим, заведён в ether2. Второй — к vlan200.
/interface vlan add disabled=no name=vlan100 vlan-id=100 interface=ether2 comment="Client 1"
/interface vlan add disabled=no name=vlan200 vlan-id=200 interface=ether2 comment="Client 2"
Маршрутизатор должен иметь IP-адрес из нашей публичной сети. Допустим, 123.45.60.1 с маской /22. Этот адрес нужно назначить на любой свободный интерфейс или vlan, даже если они потом никак не будут использоваться. Пусть это будет vlan1000:
/interface vlan add disabled=no name=vlan1000 vlan-id=1000 interface=ether2
/ip address add interface=vlan1000 address=123.45.60.1/22
Теперь сделаем настройки на маршрутизаторе для наших клиентов. Для этого выделим им любые свободные IP из диапазона нашей публичной сети, допустим 123.45.60.5 и 123.45.60.6. Добавим статические маршруты для этих адресов, ведущие в соответствующие клиентские VLAN. При этом желательно указать preffered source адрес нашего маршрутизатора.
/ip route add dst-address=123.45.60.5 gateway=vlan100 pref-src=123.45.60.1 comment="Static route to Client 1"
/ip route add dst-address=123.45.60.6 gateway=vlan200 pref-src=123.45.60.1 comment="Static route to Client 2"
Настраиваем клиента №1:
IP: 123.45.60.5
Маска: 255.255.255.252 (или /22; да, тут мы указываем маску нашей «большой» публичной сети)
Шлюз: 123.45.60.1
Настраиваем клиента №2 аналогичным образом. Меняется только IP-адрес.
IP: 123.45.60.6
Маска: 255.255.255.252 (или /22)
Шлюз: 123.45.60.1
Всё. Этого достаточно. После этого IP клиентов будут доступны из интернета, без лишней траты адресов. Остальные клиенты включаются аналогичным образом, каждый — в свой VLAN. Но в данном случае у нас возникает такая ситуация: допустим, клиент №1 хочет передать ip-пакет клиенту №2. Поскольку адрес клиента №2 попадает под маску сети /22, клиент №1 считает что №2 находится с ним в одном широковещательном домене и попытается отправить пакет не через маршрутизатор, а напрямую, для чего попытается выяснить его MAC-адрес посредством протокола ARP. Само собой, у него это не выйдет, поскольку клиенты находятся в разных VLAN и не могут передавать друг другу ARP-запросы.
Если вам нужно изолировать клиентов друг от друга — можно оставить всё как есть, хотя с точки зрения интернета это неправильно (каждый узел должен иметь связь с другим узлом по протоколу IP). Решается такая ситуация включением proxy-arp на клиентских VLAN:
/interface vlan set vlan100 arp=proxy-arp
/interface vlan set vlan200 arp=proxy-arp
Теперь маршрутизатор будет отвечать на arp-запросы клиентов, подставляя свой MAC-адрес в ответе и клиенты смогут обмениваться IP-трафиком, словно находятся в одном сегменте.
Как вы могли догадаться, аналогичным образом можно назначать в один клиентский VLAN несколько IP-адресов или даже подсетей, просто создавая статические маршруты с соответствующим dst-address.
Автор: k0ldbl00d