Допустим на Juniper MX нет маршрута по умолчанию либо он не подходит, либо трафик клиентов нужно отправить на разные NAT сервера, в этой статье я опишу как это сделать.
В первую очередь создадим отдельный интерфейс в отдельном VLAN, который будет смотреть в сторону NAT сервера, назначим IP адрес на нем и на NAT сервере. После создания routing-instances с типом virtual-router этот интерфейс будет использоваться только для связи с NAT сервером. Например:
interfaces ae0 unit 501 vlan-id 501 family inet address 10.0.55.3/24
Так как мне нужно отправить несколько статических IP адресов из сети управления, а также клиентские сети, то я решил сделать два фильтра, укажем заранее в фильтре «interface-specific», чтобы применить фильтр на разные интерфейсы:
edit firewall family inet filter MANAGEMENT-TO-NAT
set interface-specific
set term LOCAL from source-prefix-list my-prefixes
set term LOCAL from source-prefix-list RFC1918
set term LOCAL from destination-prefix-list my-prefixes
set term LOCAL from destination-prefix-list RFC1918
set term LOCAL then accept
set term NAT from source-prefix-list MANAGEMENT-IP-TO-NAT
set term NAT then routing-instance NAT-RI
set term DEFAULT then accept
Второй фильтр для клиентов:
edit firewall family inet filter GREY-TO-NAT
set interface-specific
set term LOCAL from source-prefix-list my-prefixes
set term LOCAL from source-prefix-list RFC1918
set term LOCAL from destination-prefix-list my-prefixes
set term LOCAL from destination-prefix-list RFC1918
set term LOCAL then accept
set term NAT from source-prefix-list NAT-PL
set term NAT then routing-instance NAT-RI
set term DEFAULT then accept
routing-instance я сделал общий (в котором 10.0.55.1 это шлюз по умолчанию, то есть NAT сервер, а 172.16.0.0/12 и 10.0.0.0/21 сети которые нужно отправить на NAT):
set routing-instances NAT-RI instance-type virtual-router
set routing-instances NAT-RI interface ae0.501
set routing-instances NAT-RI routing-options static route 0.0.0.0/0 next-hop 10.0.55.1
set routing-instances NAT-RI routing-options static route 172.16.0.0/12 next-table inet.0
set routing-instances NAT-RI routing-options static route 10.0.0.0/21 next-table inet.0
Создадим нужные префикс листы:
edit policy-options
set prefix-list MANAGEMENT-IP-TO-NAT 10.0.4.2/32
set prefix-list MANAGEMENT-IP-TO-NAT 10.0.0.22/32
set prefix-list NAT-PL 172.16.0.0/12
set prefix-list my-prefixes x.x.x.0/23
set prefix-list RFC1918 10.0.0.0/21
set prefix-list RFC1918 10.0.55.0/24
set prefix-list RFC1918 172.16.0.0/12
Если что в RFC1918 входят следующие подсети (в предыдущем списке я просто их укоротил до тех которые использовались в сети):
set prefix-list RFC1918 10.0.0.0/8
set prefix-list RFC1918 172.16.0.0/12
set prefix-list RFC1918 192.168.0.0/16
Если что ae0.211 выгладит так:
edit interfaces ae0
set unit 211 vlan-id 211
set unit 211 family inet address 10.0.4.1/24
Теперь чтобы статические IP адреса из management vlan отправить в routing-instance NAT-RI (в таблицу NAT-RI.inet.0), применим фильтр:
set interfaces ae0 unit 211 family inet filter input-list MANAGEMENT-TO-NAT
set interfaces ae0 unit 212 family inet filter input-list MANAGEMENT-TO-NAT
Чтобы сделать это для клиентской сети, нужно применить фильтр на динамический DHCP профиль (чем выше значение precedence, тем ниже приоритет фильтра):
edit dynamic-profiles DHCP-IP-Demux interfaces demux0 unit "$junos-interface-unit" family inet
set filter input GREY-TO-NAT precedence 150
set filter output GREY-TO-NAT-OUT precedence 150
Фильтр GREY-TO-NAT-OUT можно не применять или создать пустой, чтобы в дальнейшем можно было его редактировать не переавторизовывая пользователей, например его можно использовать для зеркалирования трафика.
Так как пользователи уже используют динамический DHCP профиль, то MX не даст его изменить так как он используется, по этому создадим еще один динамический профиль DHCP в котором применим фильтр:
show DHCP-IP-Demux2 | display set
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" no-traps
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" proxy-arp restricted
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" demux-options underlying-interface "$junos-underlying-interface"
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet mac-validate strict
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet rpf-check fail-filter RPF-ALLOW-DHCP
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet demux-source $junos-subscriber-ip-address
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet filter input GREY-TO-NAT
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet filter input precedence 150
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet unnumbered-address lo0.0
set dynamic-profiles DHCP-IP-Demux2 interfaces demux0 unit "$junos-interface-unit" family inet unnumbered-address preferred-source-address 10.10.0.3
Изменим его в настройках DHCP сервера:
edit system server services dhcp-local-server group all
set dynamic-profile DHCP-IP-Demux2
Теперь придётся переавторизовать всех клиентов, чтобы применился новый динамический профиль DHCP:
clear dhcp server binding all
Либо можно использовать опцию которая позволит применить новый DHCP профиль к новым авторизациям клиентов, а старые клиенты будут работать со старым DHCP профилем, пока не переавторизуются, но это может длится месяцами:
set system dynamic-profile-options versioning
Либо можно применить фильтр на весь трафик устройства, тогда из фильтра можно убрать interface-specific и не переавторизовывать клиентов, но мне удобнее на DHCP профиль, чтобы не создавать большой общий фильтр:
set forwarding-options family inet filter input IXNFO.COM
Добавим статический маршрут к белой сети которая используется для NAT:
set routing-options static route x.x.x.128/25 next-hop x.x.x.11
Посмотрим маршруты в таблице NAT-RI.inet.0:
run show route table NAT-RI.inet.0
На NAT сервере естественно должны быть обратные маршруты к MX, белую сеть для NAT я добавил в blackhole:
route add -net 10.0.0.0/21 gw 10.0.55.3
route add -net 172.16.0.0/12 gw 10.0.55.3
ip route add blackhole x.x.x.128/25
Смотрите другие мои статьи:
- Настройка RPF в динамических профилях
- Настройка маскарадинга (NAT) в Ubuntu
- Настройка iBGP на Juniper MX
- Настройка Juniper MX204
- Настройка blackhole в Netplan