Сделал апгрейд с FreeBSD 8.0 на 9.0. Ставился с нуля на новый диск. Сервер работает как NAT плюс несколько своих сервисов. Имею такую граблю: трафик из Интернета в локалку и обратно летает через NAT как нефиг делать любыми объёмами, трафик с сервера на внутренний интерфейс и обратно тоже летает, но как только надо передать что-то объёмное на сам сервер или с него в Интернет, соединения тут же обрываются. Т.е. заходим на сервер по ssh снаружи. Консоль работает нормально. Пытаемся передать файл по sftp (в любую сторону), тут же обрывается соединение. То же самое с http. Загрузить страничку с картинками уже нереально, грузятся обрывки и соединения обрываются.
Ядро amd64 собрано с опциями (NAT пробовал ядерный и natd):
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_NAT
options LIBALIAS
Софт весь собран из портов.
Настройки минимальные такие:rc.conf:
ifconfig_msk0="DHCP"
ifconfig_msk1="inet 192.168.0.1 netmask 255.255.255.0"
gateway_enable="YES"
firewall_enable="YES"
firewall_type="/etc/ipfw.conf"
natd_enable="YES"
natd_interface="msk0"
sshd_enable="YES"
ntpd_enable="YES"
apache22_enable="YES"
samba_enable="YES"
squid_enable="YES"
qpopper_enable="YES"ipfw.conf:
add 60000 divert natd ip from any to any via msk0
add 65000 allow ip from any to anyВ логах ничего интересного не нашёл. Помогите, как сделать диагностику, чтобы узнать причину разрыва соединений. Что это вообще такое может быть? На восьмёрке с тем же ровно железом и конфигами всё работало без проблем.
tcpdump вешайте на интерфейс и запускайте передачу по sftp. Потом вдумчивое чтение лога.
> tcpdump вешайте на интерфейс и запускайте передачу по sftp. Потом вдумчивое
> чтение лога.Вдумчивое у меня пока не получается, экспириенса маловато. Получилось вот такое, например. Начало соответствует нажатию кнопки ввода после команды cat /var/log/all.log в удалённой консоли. Потом она 30 секунд висит и не отвечает. Потом я её срубаю принудительно.
19:45:01.277491 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [P.], seq 32786295:32786347, ack 2825312168, win 65399, length 52
19:45:01.277935 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [P.], seq 1:53, ack 52, win 65535, length 52
19:45:01.444998 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [.], ack 53, win 65347, length 0
19:45:02.037891 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:03.023868 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:04.795870 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:08.139875 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:14.627892 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:25.547908 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:32.384260 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [F.], seq 52, ack 53, win 65347, length 0
19:45:32.384386 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 1501:2949, ack 52, win 65535, length 1448
19:45:32.626071 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [F.], seq 52, ack 53, win 65347, length 0
19:45:32.626170 IP SERVER_IP.22 > REMOTE_IP.1674: Flags [.], seq 53:1501, ack 52, win 65535, length 1448
19:45:33.229613 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [F.], seq 52, ack 53, win 65347, length 0
19:45:34.436498 IP REMOTE_IP.1674 > SERVER_IP.22: Flags [F.], seq 52, ack 53, win 65347, length 0Выяснил, что влияет размер MTU. Если ставить меньше 1500, то какие-то потуги передачи данных проходят, но, скажем, загрузка картинок по http (наглядно скорость видно) замедляется в геометрической прогрессии и останавливается на половине. Если мучить бОльшим потоком данных, то срубается соединение или подвисает, как повезёт.
> Выяснил, что влияет размер MTU. Если ставить меньше 1500, то какие-то потуги
> передачи данных проходят, но, скажем, загрузка картинок по http (наглядно скоростьhttp://www.netheaven.com/pmtu.html
Проверяй ping -s 1500 REMOTE_IP
Для отладки возьми ping из Linux-овых iputils, у него есть -M.
> Проверяй ping -s 1500 REMOTE_IPГлавная для меня непонятка в том, что пакеты из локалки в Интернет через NAT ходят со свистом. А с самого сервера - нет. Если бы тупо проблема в MTU на внешнем интерфейсе, то какая разница, откуда пакет попадает на этот интерфейс? Кроме того, всё же работало и с этой картой, и с этим провайдером, но на другой версии фри.
Ещё набрал наблюдений:
1) Если перейти с natd на ipfw nat, то передавать удаётся чуть больший объём данных и субъективно с меньшими лагами. При этом на передаче по sftp в логах появляются такие строки:
Mar 21 10:35:24 bcsn sshd[11924]: Accepted keyboard-interactive/pam for dmitry from REMOTE_IP port 11249 ssh2
Mar 21 10:35:24 bcsn sshd[11924]: subsystem request for sftp by user dmitry
Mar 21 10:35:24 bcsn sshd[11924]: fatal: Write failed: Permission denied
Mar 21 10:35:24 bcsn kernel: Mar 21 10:35:24 bcsn sshd[11924]: fatal: Write failed: Permission denied
Соединение обрывается и можно дальше всё начинать сначала.
2) В моменты попыток что-то передавать резко возрастает нагрузка на процессор. Судя по скачку температуры и скорости кулера, процессор начинает молотить на полную. Никогда раньше не наблюдал подобной загрузки.Всё это сильно смахивает на какие-то косяки в коде сетевого стека и/или драйвера сетевухи. Буду пробовать собрать аналог сервера на другом железе и проверять ту же конфигурацию.
Передача через сквид идет?
Возможно он и косячит.
Без него попробовать.
Еще проверить с pf.
Еще проверить без DHCP.
Какие нибудь логи в физическую консоль сыплются?
Или также тишина?
>[оверквотинг удален]
> Mar 21 10:35:24 bcsn sshd[11924]: fatal: Write failed: Permission denied
> Mar 21 10:35:24 bcsn kernel: Mar 21 10:35:24 bcsn sshd[11924]: fatal: Write
> failed: Permission denied
> Соединение обрывается и можно дальше всё начинать сначала.
> 2) В моменты попыток что-то передавать резко возрастает нагрузка на процессор. Судя
> по скачку температуры и скорости кулера, процессор начинает молотить на полную.
> Никогда раньше не наблюдал подобной загрузки.
> Всё это сильно смахивает на какие-то косяки в коде сетевого стека и/или
> драйвера сетевухи. Буду пробовать собрать аналог сервера на другом железе и
> проверять ту же конфигурацию.была похожая проблема на реалтеках при VLAN_HWTAGGING приходилось при при запуске стартовать интерфейс с минусами по данным опциям.
Источник проблемы локализован. Это ошибка в работе функции TSO на внешнем сетевом интерфейсе. ifconfig msk0 -tso полностью решило проблему.Непонятно осталось, почему вдруг этот глюк возник. Откат на старую версию фри ничего не дал, там глюк тоже проявился (а раньше не было). Был выполнен откат по работам с железом за обозримое прошлое: убран из системы дополнительный SATA контроллер и перешита старая версия BIOS в матплату. Но это тоже ничего не дало... На материнке два абсолютно одинаковых встроенных контроллера Marvell Yukon 88E8056. При этом на втором TSO работает, а на первом - с некоторых пор нет. При том, что он воткнут в сеть с ограничением скорости 10 Мбит, большой беды я в этом не вижу, но всё же неприятно иметь глюк неизвестной природы.
> Источник проблемы локализован. Это ошибка в работе функции TSO на внешнем сетевом
> интерфейсе. ifconfig msk0 -tso полностью решило проблему.Оформляйте PR
msk - железка сама по себе кривая :(
> Источник проблемы локализован. Это ошибка в работе функции TSO на внешнем сетевом
> интерфейсе. ifconfig msk0 -tso полностью решило проблему.
> Непонятно осталось, почему вдруг этот глюк возник. Откат на старую версию фрина старую - на 8.2 или на 8.0, что стояла раньше?
> ничего не дал, там глюк тоже проявился (а раньше не было).хм. А может у тебя раньше архитектура была i386?
> Был выполнен откат по работам с железом за обозримое прошлое: убран
> из системы дополнительный SATA контроллер и перешита старая версия BIOS в
> матплату. Но это тоже ничего не дало... На материнке два абсолютно
> одинаковых встроенных контроллера Marvell Yukon 88E8056. При этом на втором TSO
> работает, а на первом - с некоторых пор нет. При том,а не пробовал поменять местами сетевки - msk0 в локалку, msk1 - к провайдеру?
> что он воткнут в сеть с ограничением скорости 10 Мбит, большой
> беды я в этом не вижу, но всё же неприятно иметь
> глюк неизвестной природы.