
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