IpSec/GRE 터널의 패킷 손실

IpSec/GRE 터널의 패킷 손실

이것은 내 설정입니다.

  +---------+ +------+ +------ --------------+
  | 라우터 B a +------+ 라우터+방화벽 C | | b 라우터 D |
  | 10.10.10.1 ---------------------10.10.10.2 |
  | +------+ | | +--- 더 많은 그물
  | 192.168.10.1 | |192.168.2.11 ++--+192.168.2.57 |
  +----|---------------+ +------+ +------ --------------+
       | |                
  +----|---------------+ +----|---------------+
  |192.168.10.11 | |192.168.2.38 |
  |서버 A | |클라이언트 E |
  | | | |
  | | | |
  +---------+ +---------+
  • 라우터 B와 C에는 인터넷의 공용 IP와 192.168.10.1-192.168.2.57에 대한 IpSec 터널(Racoon)이 있습니다.
  • 모든 머신은 Ubuntu Linux를 실행하고 있습니다.
  • 터널 IP가 10.10.10.1 및 10.10.10.2인 192.168.10.1-192.168.2.57 사이에 내장된 GRE 터널이 있습니다.
  • 터널은 192.168.10.0/24 네트워크에서 라우터 D 뒤의 다른 네트워크(예: 192.168.3.0/24)로 데이터를 라우팅할 수 있어야 합니다.
  • 모든 IP는 다른 모든 IP에 대해 ping을 수행할 수 있습니다.
  • 클라이언트 E가 서버 A에서 웹 페이지를 열면 TCP/IP 핸드셰이크와 "GET /"이 서버 A에 도착하지만 서버 A의 (대규모) 응답은 클라이언트 E에 도착하지 않고 GRE "에서" 손실됩니다. 터널.
  • 조각화로 인해 큰 패킷이 손실되고 인터페이스 a와 b의 MTU가 결국 1000바이트로 줄어들었다고 생각했지만 이는 도움이 되지 않았습니다.
  • 인터페이스 a의 tcpdump는 올바른 HTTP 트래픽을 보여줍니다.
  • 인터페이스 b의 tcpdump는 E->A의 핸드셰이크 및 HTTP 트래픽을 표시하지만 A->E의 대규모 응답 패킷은 표시하지 않습니다.
  • 라우터+방화벽 C의 tcpdump는 IpSec 터널에서 GRE 패킷이 삭제되고 큰 패킷이 도착하지 않음을 보여줍니다.
  • B->E의 HTTP 요청이 정상적으로 작동합니다.
  • D<->B 사이의 대규모 패킷은 GRE를 통하지 않고 IpSec 터널(예: 192.168.2.57 인터페이스의 ssh 192.168.10.1)에서 직접 작동합니다.
  • B와 "more nets" 사이의 대규모 패킷이 작동합니다(GRE 터널을 통해!).
  • A와 E의 역할을 바꾸는 것은 도움이 되지 않습니다. (E는 서버, A는 클라이언트 또는 다른 방향의 큰 패킷은 작동하지 않습니다.)

이제 나는 막혔습니다. 무엇을 확인해야 할지 조언이 있으신가요? 진단에 도움이 되는 구성은 무엇입니까? 정말 감사합니다!

답변1

MSS를 잊으셨나요?

1) gre 터널 1400에서 mtu를 설정해야 합니다.

2) SYN 패킷의 경우 mss를 동일한 크기 mtu 1400으로 설정합니다.

리눅스에서:

iptables -I 앞으로 -i tun+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

답변2

기본 테이블은필터iptables -A FORWARD ..., 따라서 규칙을 입력하는 것과 같은 규칙을 제공하면필터테이블. 그 밖에도 테이블과 테이블이 여러개 더 있어요압착 롤러그 중 하나입니다. man iptables에서: "이 테이블은 특수 패킷 변경에 사용됩니다."

따라서 패키지를 편집하려면( 에 의해 수행됨 -j TCPMSS --set-mss) 다음을 사용해야 합니다.압착 롤러테이블이므로 규칙은 다음과 같아야 합니다.

iptables -t mangle -A FORWARD -i tun+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

관련 정보