имеется шлюз на gentoo 2.6.32 между локалкой и провайдером.
на внешнем интерфейсе маскарад.
провайдер выдаёт серый адрес вида 10.151.х.х (йота).
явление не зависит от конкретного провайдера, на скайлинке и кубтелекоме аналогично.
тем более, что проблема только в локалке, с шлюза всё ходит ровно.
все модули и примочки iptables и iproute2, включая conntrack, вкомпилены в ядро.
всё работает, исключая отдельные целевые адреса, например www.fixunix.com (174.129.213.10).
при попытке обратиться браузером по http соединение устанавливается неполностью.вывод tcpdump на шлюзе на внешнем интерфейсе:
23:26:41.088605 IP 10.151.175.232.40346 > 174.129.213.10.80: Flags [S], seq 3781115474, win 5840, options [mss 1460,sackOK,TS val 16804233 ecr 0,nop,wscale 7], length 0
23:26:41.347409 IP 174.129.213.10.80 > 10.151.175.232.40346: Flags [S.], seq 1211327233, ack 3781115475, win 5840, options [mss 1460], length 0
23:26:41.347618 IP 10.151.175.232.40346 > 174.129.213.10.80: Flags [.], ack 1, win 5840, length 0
23:26:41.347697 IP 10.151.175.232.40346 > 174.129.213.10.80: Flags [P.], seq 1:357, ack 1, win 5840, length 356
23:26:41.637781 IP 174.129.213.10.80 > 10.151.175.232.40346: Flags [.], ack 357, win 6432, length 0
23:27:24.540319 IP 10.151.175.232.40346 > 174.129.213.10.80: Flags [F.], seq 357, ack 1, win 5840, length 0
23:27:25.061866 IP 174.129.213.10.80 > 10.151.175.232.40346: Flags [.], ack 358, win 6432, length 0и всё.
браузер "соединение установлено", "ожидается ответ".telnet из локалки:
# telnet www.fixunix.com 80
Trying 174.129.213.10...
Connected to www.fixunix.com.
Escape character is '^]'.
GET / <enter>
<enter>Connection closed by foreign host.
при этом вывод tcpdump:
23:29:22.760976 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [S], seq 2014851259, win 5840, options [mss 1460,sackOK,TS val 16820403 ecr 0,nop,wscale 7], length 0
23:29:23.145506 IP 174.129.213.10.80 > 10.151.175.232.40363: Flags [S.], seq 1503627209, ack 2014851260, win 5840, options [mss 1460], length 0
23:29:23.145761 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [.], ack 1, win 5840, length 0
23:29:26.530014 IP 174.129.213.10.80 > 10.151.175.232.40363: Flags [S.], seq 1503627209, ack 2014851260, win 5840, options [mss 1460], length 0
23:29:26.530224 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [.], ack 1, win 5840, length 0
23:29:27.628771 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [P.], seq 1:8, ack 1, win 5840, length 7
23:29:28.090764 IP 174.129.213.10.80 > 10.151.175.232.40363: Flags [.], ack 8, win 5840, length 0
23:29:28.340752 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [P.], seq 8:10, ack 1, win 5840, length 2
23:29:28.608385 IP 174.129.213.10.80 > 10.151.175.232.40363: Flags [.], ack 10, win 5840, length 0
23:29:32.092515 IP 10.151.175.232.40363 > 174.129.213.10.80: Flags [P.], seq 10:12, ack 1, win 5840, length 2
23:29:32.326805 IP 174.129.213.10.80 > 10.151.175.232.40363: Flags [R], seq 1503627210, win 0, length 0при этом точно такой же телнет на шлюзе с последующим вводом
GET / <enter>
<enter>
добросовестно возвращает html-потроха страницы.нат выполняется корректно, выводы tcpdump на внутреннем и внещнем интерфейсах шлюза идентичны, разница только в подмене адресов.
пересобирал ядро, iptables, iproute2, выносил conntrack из ядра в модуль - разницы нет.
собственно вопрос - почему это происходит и чем вызвано?
а самое главное куда копать и как бороться?ПРОШУ ПОМОЩИ!
решено!проблема оказалась в разнице mtu на внутреннием и внешнем интерфейсах
лечится правилом :
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuвся дискуссия здесь:
http://linuxforum.ru/index.php?showtopic=105669