Настройка 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/24ECO2:
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/24R1:
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
