GRE/IPSEC over NAT
Здравствуйте!
Прошу помощи.
Есть две сетки, которые надо объединить, вот рисунок стенда на виртуалках:
http://storage5.static.itmages.ru/i/17/0630/h_1498810708_4793632_a80ff27c8a.png
[host1 - H1]----[router R1 (nat)]-----[router R2]
Собственно пока требуется сделать самое простое - заставить работать GRE туннель между H1 и R2 поверх IPSEC через NAT. В качестве GRE туннеля используется протокол EoIP - https://code.google.com/archive/p/linux-eoip/
на Н1 zeoip0 - 192.168.10.1
на R2 zeoip0 - 192.168.10.2
Проблема вот в чём:
IPSEC поднимается, но GRE по нему ходить не хочет.
[root@R2 etc]# ipsec status
Security Associations (1 up, 0 connecting):
nat-t[2]: ESTABLISHED 99 minutes ago, 192.168.2.202[192.168.2.202]...192.168.2.201[10.0.1.2]
nat-t{2}: REKEYED, TUNNEL, reqid 1, expires in 2 minutes
nat-t{2}: 192.168.2.202/32[gre/0] === 10.0.1.2/32[gre/0]
nat-t{3}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c6b99c38_i cff55aa7_o
nat-t{3}: 192.168.2.202/32[gre/0] === 10.0.1.2/32[gre/0]
Без ната, например когда я организовываю канал между R1 и R2, я на интерфейсе R1 вижу, что GRE заворачивается в IPSEC, машинки общаются между собой.
Если R1 сконфигурирован как шлюз с NAT, и канал организовываю между H1 и R2 то возникает проблема.
На R1 вообще не видно пакетов ESP, туда почему-то ломится GRE:
на R2 делаю
ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
From 192.168.10.2 icmp_seq=1 Destination Host Unreachable
From 192.168.10.2 icmp_seq=2 Destination Host Unreachable
Jun 30 09:07:02 R1 kernel: TRACE: raw:PREROUTING:policy:4 IN=ens3 OUT= MAC=52:54:00:36:5c:07:52:54:00:66:16:fe:08:00 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=28345 DF PROTO=47
Jun 30 09:07:02 R1 kernel: TRACE: filter:INPUT:policy:1 IN=ens3 OUT= MAC=52:54:00:36:5c:07:52:54:00:66:16:fe:08:00 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=28345 DF PROTO=47
Jun 30 09:07:03 R1 kernel: TRACE: raw:PREROUTING:policy:4 IN=ens3 OUT= MAC=52:54:00:36:5c:07:52:54:00:66:16:fe:08:00 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=28392 DF PROTO=47
Jun 30 09:07:03 R1 kernel: TRACE: filter:INPUT:policy:1 IN=ens3 OUT= MAC=52:54:00:36:5c:07:52:54:00:66:16:fe:08:00 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=28392 DF PROTO=47
Далее портянки конфигов и логов, думал не выкладывать, может кто-то уже знает в чём может быть дело. Но вдруг надо, так что выложу.
Конфигурация шлюза R1 ничего необычного, обыкновенный маскарадинг и мониторинг
[uzer@R1 ~]$ sudo iptables -nvL
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1148 56929 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
49 3610 ACCEPT all -- ens4 ens3 0.0.0.0/0 0.0.0.0/0
[uzer@R1 ~]$ sudo iptables -nvL -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
48 3512 MASQUERADE all -- * ens3 0.0.0.0/0 0.0.0.0/0
[uzer@R1 ~]$ sudo iptables -nvL -t raw
Chain PREROUTING (policy ACCEPT 517 packets, 33595 bytes)
pkts bytes target prot opt in out source destination
17 1496 TRACE all -- * * 192.168.2.202 0.0.0.0/0
0 0 TRACE all -- * * 192.168.10.2 0.0.0.0/0
54 1948 TRACE all -- * * 10.0.1.2 0.0.0.0/0
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:36:5c:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.201/24 brd 192.168.2.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe36:5c07/64 scope link
valid_lft forever preferred_lft forever
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:fe:8d:e9 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.1/24 brd 10.0.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fefe:8de9/64 scope link
valid_lft forever preferred_lft forever
конфигурация хоста Н1:
[root@H1 etc]# iptables -vnL
Chain INPUT (policy ACCEPT 5151 packets, 1210K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 47 -- ens4 * 192.168.2.202 10.0.1.2 policy match dir in pol ipsec reqid 1 proto 50
0 0 ACCEPT 47 -- ens3 * 0.0.0.0/0 0.0.0.0/0 policy match dir in pol ipsec
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 766 packets, 139K bytes)
pkts bytes target prot opt in out source destination
1 98 ACCEPT 47 -- * ens4 10.0.1.2 192.168.2.202 policy match dir out pol ipsec reqid 1 proto 50
43 3122 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 policy match dir out pol ipsec mode tunnel tunnel-dst 192.168.2.202 tunnel-src 10.0.1.2
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:c2:cb:4d brd ff:ff:ff:ff:ff:ff
inet 10.0.1.2/24 brd 10.0.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fec2:cb4d/64 scope link
valid_lft forever preferred_lft forever
3: zeoip0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether f2:3f:4c:42:d9:12 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 scope global zeoip0
valid_lft forever preferred_lft forever
inet6 fe80::f03f:4cff:fe42:d912/64 scope link
valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 22:97:e9:9f:85:7f brd ff:ff:ff:ff:ff:ff
[root@R2 etc]# iptables -vnL
Chain INPUT (policy ACCEPT 5151 packets, 1210K bytes)
pkts bytes target prot opt in out source destination
1 98 ACCEPT 47 -- ens3 * 10.0.1.2 192.168.2.202 policy match dir in pol ipsec reqid 1 proto 50
13 1022 ACCEPT 47 -- ens3 * 0.0.0.0/0 0.0.0.0/0 policy match dir in pol ipsec
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 766 packets, 139K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 47 -- * ens3 192.168.2.202 10.0.1.2 policy match dir out pol ipsec reqid 1 proto 50
0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 policy match dir out pol ipsec mode tunnel tunnel-dst 10.0.1.2 tunnel-src 192.168.2.202
0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 policy match dir out pol ipsec mode tunnel tunnel-dst 192.168.2.202 tunnel-src 10.0.1.2
0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 policy match dir out pol ipsec mode tunnel tunnel-dst 192.168.2.201 tunnel-src 192.168.2.202
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:66:16:fe brd ff:ff:ff:ff:ff:ff
inet 192.168.2.202/24 brd 192.168.2.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe66:16fe/64 scope link
valid_lft forever preferred_lft forever
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:02:78:e8 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.21/24 brd 10.0.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe02:78e8/64 scope link
valid_lft forever preferred_lft forever
4: zeoip0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 9a:50:6d:e8:be:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.2/24 scope global zeoip0
valid_lft forever preferred_lft forever
inet6 fe80::9850:6dff:fee8:becc/64 scope link
valid_lft forever preferred_lft forever
я уже согласен с кем нибудь попробовать настроить обычный gretap с бриджем между Н1 и R2, вместо eoip, лишь бы заработало.