Почалось усе з того що вранці від спеки голова не варила і я вирішив зайнятись чимось ненапряжним - доналаштувати сервер. Давно уже думав просканити його nmap'ом, а тут як раз нагода. Просканував і побачив що уся моя NFS голою дупою стирчить в інтернети, разом із пачкою інших сервісів. Ну інші-то я швидко виправив, а от з NFS прийшлось туго.
Є там такий демон rpcbind для підтримки RPC з різними транспортами. У нього є ключик -h:
На TCP він не діє ніяк. UDP байндиться до вказаного мною інтерфейсу а TCP до INADDR_ANY. Спочатку я не звернув уваги на те що цей ключ діє тільки на UDP і подумав що знайшов баг. Поліз у джерельні коди і побачив що ініціалізація connection-oriented транспортів дуже відрізняється від ініціалізації connectionless транспортів. Вона повністю ігнорує явне вказування адрес. У RFC 1833 явної заборони на це немає. Крім того, FreeBSD'шники давно вже хочуть патча для цього. Я навіть хотів нашвидкуруч патч накатати, благо він утворюється тривіальним повтором коду для connectionless транспортів, але вирішив пошукати. І надибав: http://lists.pld-linux.org/mailman/pipermail/pld-cvs-commit/Week-of-Mon-20100927/289312.html - минулого року PLT Linux уже заморочувався цим. Крім того, цікава полеміка вийшла при спробі пропихнути патч в апстрим: http://www.spinics.net/lists/linux-nfs/msg15949.html.
Я патчик узяв, і зробив ebuild у локальному оверлеї. Поставив, протестував, пустив у reboot NFS-клієнта і... І сервак завис у черговий раз. Від перегріву.
Розкрутив, підімкнув кулери, закрутиів, включив і... І він не запустився бо загубив контролер з CF. Я посмикав шлейфи і він знову не завантажився. Подумки проклинаючи китайське барахло потяг монітор і клавіатуру в коридор, виставляти заново у BIOS порядок завантаження. Виставив, запустив. І побачив що у мене розсипався RAID. Аргх!
Задовбало це машинне рабство! Хочеться щоб включити - і воно just works!
Є там такий демон rpcbind для підтримки RPC з різними транспортами. У нього є ключик -h:
-h Specify specific IP addresses to bind to for UDP requests. This option may be specified mul‐ tiple times and is typically necessary when running on a multi-homed host. If no -h option is specified, rpcbind will bind to INADDR_ANY, which could lead to problems on a multi-homed host due to rpcbind returning a UDP packet from a different IP address than it was sent to. Note that when specifying IP addresses with -h, rpcbind will automatically add 127.0.0.1 and if IPv6 is enabled, ::1 to the list.
На TCP він не діє ніяк. UDP байндиться до вказаного мною інтерфейсу а TCP до INADDR_ANY. Спочатку я не звернув уваги на те що цей ключ діє тільки на UDP і подумав що знайшов баг. Поліз у джерельні коди і побачив що ініціалізація connection-oriented транспортів дуже відрізняється від ініціалізації connectionless транспортів. Вона повністю ігнорує явне вказування адрес. У RFC 1833 явної заборони на це немає. Крім того, FreeBSD'шники давно вже хочуть патча для цього. Я навіть хотів нашвидкуруч патч накатати, благо він утворюється тривіальним повтором коду для connectionless транспортів, але вирішив пошукати. І надибав: http://lists.pld-linux.org/mailman/pipermail/pld-cvs-commit/Week-of-Mon-20100927/289312.html - минулого року PLT Linux уже заморочувався цим. Крім того, цікава полеміка вийшла при спробі пропихнути патч в апстрим: http://www.spinics.net/lists/linux-nfs/msg15949.html.
Я патчик узяв, і зробив ebuild у локальному оверлеї. Поставив, протестував, пустив у reboot NFS-клієнта і... І сервак завис у черговий раз. Від перегріву.
Розкрутив, підімкнув кулери, закрутиів, включив і... І він не запустився бо загубив контролер з CF. Я посмикав шлейфи і він знову не завантажився. Подумки проклинаючи китайське барахло потяг монітор і клавіатуру в коридор, виставляти заново у BIOS порядок завантаження. Виставив, запустив. І побачив що у мене розсипався RAID. Аргх!
Задовбало це машинне рабство! Хочеться щоб включити - і воно just works!