У меня есть такой топологический граф сети:
Local box GateWay box
+---------------+ +--------------------------+
|192.168.1.200 | -> |192.168.1.2 10.2.10.2 |
+---------------+ +--------------------------+
|
|GRE tunnel over pppoe
|
v
+----------------+ +--------------------------+
| The Internet | <-- |54.179.141.101 10.2.10.1 |
+----------------+ +--------------------------+
Remote "proxy" box
И gateway box
ppoe имеет mtu 1468, а также tun0
туннель (который является туннелем gre). Проблема в том, что когда это простой HTTP-запрос, все работает нормально. Но когда дело доходит до https, некоторые сайты вроде https://www.gravatar.com/avatar/8bd68135185d99a58252795422d21bb9?s=24&d=identicon&r=PG . Не удается установить https-соединение. И вывод с curl застрял на этом:
curl -v "https://www.gravatar.com/avatar/8bd68135185d99a58252795422d21bb9?s=24&d=identicon&r=PG"
* Hostname was NOT found in DNS cache
* Trying 68.232.44.121...
* Connected to www.gravatar.com (68.232.44.121) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
Он застрял там только ждать тайм-аута. Но я могу выполнить тот же запрос, успешно на Remote "proxy" box
. Итак, я предполагаю, что что-то не так с туннелем gre (или даже с правилами iptable, которые я написал?)
Итак, я получаю wirehark и записываю пакет на GateWay box
и результат:
Это показывает, что при подтверждении ssl отсутствует сегмент.
Для получения дополнительной информации правило iptables выглядит следующим образом:
На коробке GateWay
*nat
:PREROUTING ACCEPT [61416:4763478]
:INPUT ACCEPT [19674:1619565]
:OUTPUT ACCEPT [18416:1183854]
:POSTROUTING ACCEPT [3:144]
-A POSTROUTING -o ppp0 -j MASQUERADE
-A POSTROUTING -o tun0 -j MASQUERADE #<- this is a gre tunnel and the route for this request
-A POSTROUTING -o tun1 -j MASQUERADE
В поле прокси
*nat
:PREROUTING ACCEPT [3997:794751]
:INPUT ACCEPT [297:43841]
:OUTPUT ACCEPT [612:44944]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
Я погуглил, и некоторые ребята сказали, что это может быть связано с MTU, но как я могу дополнительно диагностировать эту проблему?
Это проблема MTU, это правило iptable (на шлюзе) заставляет его работать:
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu