이상한 IPsec 동작

이상한 IPsec 동작

잘 설명할 수 없는 흥미로운 것을 발견했습니다. 간단한 Ubuntu 20.04 상자를 열고 IPSec 터널을 통해 모든 트래픽을 보호하려고 시도했습니다. 저는 VTI나 xfrm 인터페이스를 사용하지 않고 양쪽 끝에서 TS로 0.0.0.0을 협상합니다. IPsec 터널이 없으면 모든 것이 정상입니다.

이제 터널을 시작하면 터널이 잘 작동됩니다. 이제 iperf TCP 테스트를 실행하면 제대로 작동합니다. 패킷은 터널을 통해 다시 애플리케이션으로 흐르고 예상 처리량을 얻습니다.

핑 테스트를 실행할 때도 잘 실행됩니다.

문제는 네트워크 트래픽입니다. wget을 수행하거나 브라우저를 사용하려고 하면 트래픽이 잘 흐르고 Ubuntu 20 노드로 돌아가는 것을 볼 수 있지만 애플리케이션에는 도달하지 않습니다.

따라서 wget은 응답을 볼 수 없지만 TCP 연결은 예상대로 ESTAB를 얻고 Wireshark에서는 터널링 및 암호 해독 후 응답을 볼 수 있습니다. 그러나 설명할 수 없는 이유로 네트워크 트래픽을 사용하려고 할 때만 트래픽이 의도한 응용 프로그램에 도달하지 않는다는 것을 알게 되었습니다.

어떤 단서도요. 내 IPsec 구성에는 흥미로운 점이 없습니다.

vtewari@vtewari-ububtu:~$ sudo swanctl --list-sas
[sudo] password for vtewari: 
tenant-13543-1010: #9, ESTABLISHED, IKEv2, 43319062223514a3_i* 2927ffc3801b0fa2_r
  local  '[email protected]' @ 10.0.2.15[4500]
  remote 'vtewari-remote' @ vtewari-remote[4500]
  AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
  established 2622s ago, reauth in 24647s
  tenant-13543-1010: #13, reqid 11, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA1_96
    installed 2623s ago, rekeying in 68598s, expires in 69378s
    in  c6fce0ab,    600 bytes,     7 packets,   381s ago
    out c13ce846, 127082 bytes,    96 packets,   381s ago
    local  0.0.0.0/0
    remote 0.0.0.0/0

vtewari@vtewari-ububtu:~$ sudo swanctl --list-conns
tenant-13543-1010: IKEv2, reauthentication every 215460s, no rekeying
  local:  %any
  remote: vtewari-remote
  local pre-shared key authentication:
    id: [email protected]
  remote pre-shared key authentication:
  tenant-13543-1010: TUNNEL, rekeying every 71460s
    local:  0.0.0.0/0
    remote: 0.0.0.0/0

Ping/Iperf가 터널 테스트를 성공적으로 통과했습니다.

vtewari@vtewari-ububtu:~$ iperf3 -c paris.testdebit.info -p 9237 -R
Connecting to host paris.testdebit.info, port 9237
Reverse mode, remote host paris.testdebit.info is sending
[  5] local 10.0.2.15 port 33296 connected to 89.84.1.194 port 9237
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  37.1 KBytes   304 Kbits/sec                  
[  5]   1.00-2.00   sec   102 KBytes   830 Kbits/sec                  
^C[  5]   2.00-2.54   sec   131 KBytes  2.01 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-2.54   sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-2.54   sec   270 KBytes   871 Kbits/sec                  receiver
iperf3: interrupt - the client has terminated

그러나 TCP 연결에도 불구하고 wget은 응답을 보지 못합니다.

vtewari@vtewari-ububtu:~$ wget http://google.com --verbose -O index.html
--2022-06-05 15:10:00--  http://google.com/
Resolving google.com (google.com)... 142.250.77.46, 2404:6800:4009:81c::200e
Connecting to google.com (google.com)|142.250.77.46|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2022-06-05 15:10:01--  http://www.google.com/
Resolving www.google.com (www.google.com)... 142.251.42.4, 2404:6800:4009:82f::2004
Connecting to www.google.com (www.google.com)|142.251.42.4|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                           [<=>                                                       ]       0  --.-KB/s               

브라우저에서도 같은 내용이 보입니다. 터널링을 비활성화하면 모든 것이 정상입니다. 터널링을 활성화하면 브라우저가 서버에 연결할 수 없습니다.

이에 대한 통찰력을 가져주셔서 감사합니다.

관련 정보