Назад |
Перейти на главную страницу
Потеря пакетов в туннеле IpSec / GRE
Это моя установка:
+--------------------+ +-------------------+ +--------------------+
| Router B a +-----+ Router+Firewall C | | b Router D |
| 10.10.10.1 ----------------------------------10.10.10.2 |
| +-----+ | | +--- more nets
| 192.168.10.1 | |192.168.2.11 +--+192.168.2.57 |
+----|---------------+ +-------------------+ +--------------------+
| |
+----|---------------+ +----|---------------+
|192.168.10.11 | |192.168.2.38 |
|Server A | |Client E |
| | | |
| | | |
+--------------------+ +--------------------+
- Маршрутизаторы B и C имеют общедоступные IP-адреса в Интернете и туннель IpSec (Racoon) для 192.168.10.1-192.168.2.57.
- Все машины работают под управлением Ubuntu Linux.
- Существует встроенный туннель GRE между 192.168.10.1-192.168.2.57 с IP-адресами туннеля 10.10.10.1 и 10.10.10.2.
- Туннель необходим для возможности маршрутизации данных из сети 192.168.10.0/24 в другие сети за маршрутизатором D (например, 192.168.3.0/24).
- Каждый IP может пинговать любой другой IP.
- Если клиент E открывает веб-страницу на сервере A, подтверждение TCP / IP и сообщение «GET /» поступают на сервер A, но (большой) ответ сервера A не поступает на клиент E, а теряется «в» GRE. туннель.
- Я думал, что мы теряем большие пакеты из-за фрагментации, и уменьшили MTU на интерфейсах a и b, в конце концов, до 1000 байт, но это не помогло.
- tcpdump на интерфейсе a показывает правильный HTTP-трафик
- tcpdump на интерфейсе b показывает подтверждение связи и HTTP-трафик от E-> A, но не показывает большие пакеты ответа от A-> E.
- tcpdump на маршрутизаторе + брандмауэр C показывает, что пакеты GRE выпадают из туннеля IpSec, большие пакеты не поступают
- HTTP-запрос от B-> E работает нормально.
- Большие пакеты между D <-> B не через GRE, а непосредственно в туннеле IpSec (т.е. ssh 192.168.10.1 на интерфейсе 192.168.2.57) работают
- Большие пакеты между B и "другими сетями" работают (через туннель GRE!).
- Обмен ролями A и E не помогает. (E как сервер, A как клиент или большие пакеты в другом направлении не работают.)
Теперь я застрял. Любой совет, что проверить? Какой конфиг помог бы диагностировать? Большое спасибо!
Таблица по умолчанию фильтр, поэтому, когда вы предоставляете правило вроде iptables -A FORWARD ...
ты просто вставляешь правило фильтр стол. Также есть несколько других таблиц и таблица калечить один из них. По словам man iptables: «Эта таблица используется для специализированного изменения пакетов».
Итак, для редактирования пакетов (что выполняется -j TCPMSS --set-mss
) следует использовать калечить table, поэтому правило должно быть таким:
iptables -t mangle -A FORWARD -i tun+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
Вы забыли о MSS
1) Вы должны установить mtu на gre tunnel 1400
2) Для пакетов SYN установите для mss тот же размер mtu 1400
в Linux:
iptables -I FORWARD -i tun + -p tcp -m tcp --tcp-flags SYN, RST SYN -j TCPMSS --set-mss 1400