LINUX.ORG.RU
ФорумAdmin

GRE/IPSEC over NAT

 , ,


0

1

Здравствуйте! Прошу помощи.
Есть две сетки, которые надо объединить, вот рисунок стенда на виртуалках:
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
на R1 получаю:
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 
IPSEC не видно.

Далее портянки конфигов и логов, думал не выкладывать, может кто-то уже знает в чём может быть дело. Но вдруг надо, так что выложу.

Конфигурация шлюза 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           
ip ad
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
ip addr
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
конфигурация хоста R2:
[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
ip addr
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, лишь бы заработало.



Последнее исправление: pdn_mail (всего исправлений: 1)

Проблема NATа[править | править вики-текст] Так как GRE является протоколом сетевого уровня и не использует порты (в отличие от протоколов TCP и UDP), а одним из необходимых условий работы механизма PAT является наличие «открытого» порта, то работа протокола GRE через межсетевой экран может быть затруднена[3].

Частным случаем решения проблемы для протокола PPTP является технология PPTP Passthrough, в этом случае межсетевой экран «разрешает» исходящие (клиентские) подключения из защищённой сети.

rootmaster
()

очевидно, что нат не при чем. gre пакеты не попадают в ipsec туннель, значит, не соответствуют ipsec правилам H1 и надо посмотрель маршрутизацию H1.

anonymous
()
Ответ на: комментарий от anonymous
[uzer@H1 ~]$ ip ro
default via 10.0.1.1 dev ens4 
10.0.1.0/24 dev ens4 proto kernel scope link src 10.0.1.2 
192.168.10.0/24 dev zeoip0 proto kernel scope link src 192.168.10.1 
[root@R2 etc]# ip ro
default via 192.168.2.1 dev ens3 
10.0.1.0/24 dev ens4 proto kernel scope link src 10.0.1.21 
192.168.2.0/24 dev ens3 proto kernel scope link src 192.168.2.202 
192.168.10.0/24 dev zeoip0 proto kernel scope link src 192.168.10.2 
[uzer@R1 ~]$ ip ro
default via 192.168.2.1 dev ens3 
10.0.1.0/24 dev ens4 proto kernel scope link src 10.0.1.1 
192.168.2.0/24 dev ens3 proto kernel scope link src 192.168.2.201 

Вот, вроде ничего криминального в маршрутизации нет.

pdn_mail
() автор топика

Попутно ещё есть вопрос

Через нат возможно поднять туннель в транспортном режиме или нет? А то у меня пока получилось поднять только в режиме туннеля.

pdn_mail
() автор топика
Ответ на: Попутно ещё есть вопрос от pdn_mail

через нат поднимают инкапсуляцию в UDP что у вас и происходит. Что в этом плохого ?

anonymous
()
Ответ на: комментарий от anonymous

H1 тут не причём, оттуда нормально пакеты доходят. я писал что проблема прохождения пакетов с R2 до H1
Согласен что правила смотреть надо, только я врубится не могу, что именно должно быть написано. Кстати да, не выложил то, что уходит с R2 при ping 192.168.2.10 Вот:

Jul 05 07:15:53 R2 kernel: TRACE: raw:OUTPUT:policy:4 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49603 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=1 UID=0 GID=0 
Jul 05 07:15:53 R2 kernel: TRACE: nat:OUTPUT:policy:1 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49603 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=1 UID=0 GID=0 
Jul 05 07:15:53 R2 kernel: TRACE: filter:OUTPUT:policy:5 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49603 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=1 UID=0 GID=0 
Jul 05 07:15:53 R2 kernel: TRACE: nat:POSTROUTING:policy:1 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49603 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=1 UID=0 GID=0 
Jul 05 07:15:53 R2 kernel: TRACE: raw:OUTPUT:policy:4 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32788 DF PROTO=47 UID=0 GID=0 
Jul 05 07:15:53 R2 kernel: TRACE: filter:OUTPUT:policy:5 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32788 DF PROTO=47 UID=0 GID=0 
Jul 05 07:15:54 R2 kernel: TRACE: raw:OUTPUT:policy:4 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32805 DF PROTO=47 UID=0 GID=0 
Jul 05 07:15:54 R2 kernel: TRACE: filter:OUTPUT:policy:5 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32805 DF PROTO=47 UID=0 GID=0 
Jul 05 07:15:54 R2 kernel: TRACE: raw:OUTPUT:policy:4 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49772 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=2 UID=0 GID=0 
Jul 05 07:15:54 R2 kernel: TRACE: filter:OUTPUT:policy:5 IN= OUT=zeoip0 SRC=192.168.10.2 DST=192.168.10.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49772 DF PROTO=ICMP TYPE=8 CODE=0 ID=2931 SEQ=2 UID=0 GID=0 
Jul 05 07:15:55 R2 kernel: TRACE: raw:OUTPUT:policy:4 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32812 DF PROTO=47 UID=0 GID=0 
Jul 05 07:15:55 R2 kernel: TRACE: filter:OUTPUT:policy:5 IN= OUT=ens3 SRC=192.168.2.202 DST=192.168.2.201 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=32812 DF PROTO=47 UID=0 GID=0 
а должны быть пакеты PROTO=UDP SPT=4500 DPT=4500 SRC=192.168.2.202 DST=192.168.2.201

подозреваю что для R2 надо писать правило не так как тут написано:

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
только повторяю, я пока понять не могу как.

pdn_mail
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.