Настройка GRE over IPsec через NAT с Keepalive

Постройте схему в соответствии с рисунком ниже.

Рисунок

На R2 настроен механизм NAT (Network Address Translation). Он делит схему на публичную сеть слева и приватную сеть справа. Необходимо проложить шифрованный в IPsec туннель GRE от ECO1 до ECO2. Прямая маршрутизация через NAT невозможна (локальные адреса не видны из публичной сети), поэтому необходимо специальным образом настроить IPsec и реализовать механизм NAT Traversal. При этом формально туннель IPsec строится между ECO1 и R2, но фактически согласование параметров IPsec и последующий обмен данными происходит между ECO1 и ECO2.

Сообщения проверки состояния соединения Keepalive передаются внутри шифрованного GRE туннеля между концами этого туннеля, поэтому NAT для них не является препятствием и функция Keepalive работает в штатном режиме.

Настройте узлы сети, как изложено ниже.

ECO1:

enable
configure
 
hostname ECO1
 
crypto-ipsec ike enable
 
crypto-ipsec profile PF1 ike-v2
 mode tunnel
 source 10.0.1.1
 # Механизм NAT Traversal включается автоматически при использовании IKEv2
 nat-traversal
 ike-phase1
  proposal aes256-sha256-modp2048
  auth pre-shared-key 123
 ike-phase2
  protocol esp
  proposal aes256-sha256
  # Шифровать только пакеты GRE исходящие с адреса 10.0.1.1
  local-ts 10.0.1.1[gre]
  # Принимать только шифрованные пакеты GRE с адреса 10.0.3.2 
  remote-ts 10.0.3.2[gre]
 
crypto-map CM1 1
 # К любому трафику к/от 10.0.2.2 → применить IPsec профиль PF1
 match peer 10.0.2.2
 set crypto-ipsec profile PF1
 
filter-map ipv4 FM-PERMIT 10
 match any any any
 set accept
 
# Карта фильтрации для исходящего от ECO1 трафика
filter-map ipv4 FM1 10
 # Отобрать пакеты с GRE идущие от ECO1 к ECO2
 match gre host 10.0.1.1 host 10.0.3.2
 # Зашифровать по параметрам согласованным с 10.0.2.2
 set crypto-map CM1 peer 10.0.2.2
 # Адреса должны совпадать указанным в IPsec-профиле local-ts и remote-ts
 
# Карта фильтрации для входящего в ECO1 трафика
filter-map ipv4 FM1 20
 # Отобрать пакеты с UDP и портом 4500 (IPsec NAT traversal)
 # идущие с R2 на ECO1
 match udp host 10.0.2.2 eq 4500 host 10.0.1.1 eq 4500
 # Расшифровать по параметрам согласованным с 10.0.2.2 
 set crypto-map CM1 peer 10.0.2.2
 
# На R2 адрес 10.0.2.2 транслируется в 10.0.3.2 
# и реальное согласование IPsec происходит не с R2, а с ECO2
 
# Маршрутизация OSPF через GRE туннель
router ospf 1
 # Подсеть PC1
 network 10.0.0.0/24 area 0
 # Подсеть GRE туннеля
 network 192.168.0.8/31 area 0
 
# Маршрутизация BGP через GRE туннель
router bgp 1
 neighbor 192.168.0.8 remote-as 3
 
# Маршрут к R2 — противоположной точке IPsec туннеля
ip route 10.0.2.2/32 10.0.1.2
 
port ge0
 service-instance WAN
  encapsulation untagged
 
port ge1
 service-instance LAN
  encapsulation untagged
 
# Построение GRE туннеля между двумя точками ECO1 и ECO2
interface tunnel.0
 ip address 192.168.0.9/31
 ip tunnel 10.0.1.1 10.0.3.2 mode gre
 ip tunnel keepalive 10 1
 ip tunnel keepalive nat-avoidance source 192.168.0.8
 ip tunnel keepalive nat-avoidance destination 192.168.0.9
 set filter-map in FM1 100
 set filter-map in FM-PERMIT 200
 ip ospf network point-to-point
 
interface WAN
 connect port ge0 service-instance WAN
 ip address 10.0.1.1/24
 set filter-map in FM1 100
 set filter-map in FM-PERMIT 200
 
interface LAN
 connect port ge1 service-instance LAN
 ip address 10.0.0.1/24

ECO2:

enable
configure
 
hostname ECO2
 
crypto-ipsec ike enable
 
crypto-ipsec profile PF1 ike-v2
 mode tunnel
 source 10.0.3.2
 nat-traversal
 ike-phase1
  proposal aes256-sha256-modp2048
  auth pre-shared-key 123
 ike-phase2
  protocol esp
  proposal aes256-sha256
  local-ts 10.0.3.2[gre]
  remote-ts 10.0.1.1[gre]
 
crypto-map CM1 1
 match peer 10.0.1.1
 set crypto-ipsec profile PF1
 
filter-map ipv4 FM-PERMIT 10
 match any any any
 set accept
 
filter-map ipv4 FM1 10
 match gre host 10.0.3.2 host 10.0.1.1
 set crypto-map CM1 peer 10.0.1.1
 
filter-map ipv4 FM1 20
 match udp host 10.0.1.1 eq 4500 host 10.0.3.2 eq 4500
 set crypto-map CM1 peer 10.0.1.1
 
router ospf 1
 network 192.0.0.0/24 area 0
 network 192.168.0.8/31 area 0
 
router bgp 3
 neighbor 192.168.0.9 remote-as 1
 
ip route 0.0.0.0/0 10.0.3.1
 
port ge1
 service-instance WAN
  encapsulation untagged
 
port ge0
 service-instance LAN
  encapsulation untagged
 
interface tunnel.0
 ip address 192.168.0.8/31
 ip tunnel 10.0.3.2 10.0.1.1 mode gre
 ip tunnel keepalive 10 1
 ip tunnel keepalive nat-avoidance source 192.168.0.9
 ip tunnel keepalive nat-avoidance destination 192.168.0.8
 set filter-map in FM1 100
 set filter-map in FM-PERMIT 200
 
interface WAN
 connect port ge1 service-instance WAN
 ip address 10.0.3.2/24
 set filter-map in FM1 10
 set filter-map in FM-PERMIT 20
 
interface LAN
 connect port ge0 service-instance LAN
 ip address 192.0.0.1/24

R1:

conf t
 
interface FastEthernet0/0
 ip address 10.0.2.1 255.255.255.0
 no shut
 
interface FastEthernet1/0
 ip address 10.0.1.2 255.255.255.0
 no shut
 

R2:

conf t
 
interface FastEthernet0/0
 ip address 10.0.3.1 255.255.255.0
 # Направление трансляции NAT внутрь к приватной сети
 ip nat inside
 # Собрать фрагменты в полный входящий пакет для NAT-трансляции
 ip virtual-reassembly in
 no shut
 
interface FastEthernet1/0
 ip address 10.0.2.2 255.255.255.0
 # Направление трансляции NAT наружу к публичной сети
 ip nat outside
 ip virtual-reassembly in
 no shut
 
# Static NAT
# Исходящий адрес меняется с 10.0.3.2 на 10.0.2.2 и наоборот в другую сторону
ip nat inside source static 10.0.3.2 10.0.2.2
 
# Маршрут к ECO1 — противоположной точке IPsec туннеля
ip route 10.0.1.0 255.255.255.0 10.0.2.1

Команда ip virtual-reassembly in собирает пакет из фрагментов для корректной NAT-трансляции. Фрагменты (кроме первого) не имеют заголовков уровня 4 (отсутствуют порты UDP), что не позволяет функции NAT, корректно их проверить. Команда включается автоматически, при включении команды ip nat inside/outside.

На каждом PC настройте адрес и шлюз:

  • PC1: ip 10.0.0.100/24 10.0.0.1
  • PC2: ip 192.0.0.100/24 192.0.0.1