Pérdida de paquetes en el túnel IpSec/GRE

Pérdida de paquetes en el túnel IpSec/GRE

Esta es mi configuración:

  +--------------------+ +-------------------+ +------ --------------+
  | Enrutador B a +-----+ Enrutador+Firewall C | | b Enrutador D |
  | 10.10.10.1 ----------------------------------10.10.10.2 |
  | +-----+ | | +--- más redes
  | 192.168.10.1 | |192.168.2.11 +--+192.168.2.57 |
  +----|---------------+ +-------------------+ +------ --------------+
       | |                
  +----|---------------+ +----|---------------+
  |192.168.10.11 | |192.168.2.38 |
  |Servidor A | |Cliente E |
  | | | |
  | | | |
  +--------------------+ +--------------------+
  • Los enrutadores B y C tienen IP públicas en Internet y un túnel IpSec (Racoon) para 192.168.10.1-192.168.2.57.
  • Todas las máquinas ejecutan Ubuntu Linux.
  • Hay un túnel GRE integrado entre 192.168.10.1-192.168.2.57 con las IP del túnel 10.10.10.1 y 10.10.10.2.
  • Se requiere que el túnel pueda enrutar datos desde la red 192.168.10.0/24 a otras redes detrás del enrutador D (por ejemplo, 192.168.3.0/24).
  • Cada IP puede hacer ping a todas las demás IP.
  • Si el cliente E abre una página web en el servidor A, el protocolo de enlace TCP/IP y el "GET /" llegan al servidor A, pero la respuesta (grande) del servidor A no llega al cliente E, sino que se pierde "en" el GRE. túnel.
  • Pensé que estropeábamos paquetes grandes debido a la fragmentación y redujimos la MTU en las interfaces a y b, al final a 1000 bytes, pero esto no ayudó.
  • tcpdump en la interfaz a muestra el tráfico HTTP correcto
  • tcpdump en la interfaz b muestra el protocolo de enlace y el tráfico HTTP de E->A, pero no muestra los paquetes de respuesta grandes de A->E.
  • tcpdump en Router+Firewall C muestra que los paquetes GRE salen del túnel IpSec, no llegan paquetes grandes
  • La solicitud HTTP de B->E funciona bien.
  • Los paquetes grandes entre D<->B no a través de GRE sino directamente en el túnel IpSec (es decir, ssh 192.168.10.1 en la interfaz 192.168.2.57) funcionan
  • Los paquetes grandes entre B y "más redes" funcionan (¡a través del túnel GRE!).
  • Intercambiar los roles de A y E no ayuda. (E como servidor, A como cliente o paquetes grandes en la otra dirección no funcionan).

Ahora estoy estancado. ¿Algún consejo sobre qué comprobar? ¿Qué configuración ayudaría a diagnosticar? ¡Muchas gracias!

Respuesta1

Te olvidaste de MSS

1) Debes configurar mtu en el túnel gre 1400

2) Para paquetes SYN, configure mss en el mismo tamaño mtu 1400

en Linux:

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

Respuesta2

La tabla predeterminada esfiltrar, entonces cuando proporcionas una regla comoiptables -A FORWARD ... acabas de ponerfiltrarmesa. También hay varias otras mesas y mesas.mutilares uno de ellos. A partir de man iptables: "Esta tabla se utiliza para la alteración de paquetes especializados".

Entonces, para editar paquetes (lo cual se hace mediante-j TCPMSS --set-mss ), se debe usar unmutilartabla, es por eso que la regla debería ser así:

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

información relacionada