dil: (Default)
Tuesday, October 10th, 2017 09:24 pm

Сегодня настраивал маршрутизатор (pfsense) для подсоединения офисной сетки через нового интернет-провайдера. Казалось бы, задачка элементарная, что там может быть сложного..
Но я, как обычно, наступил на загадочные грабли:

1) Настроил DHCP-сервер, для проверки подключил свой ноутбук, посмотрел ifconfig’ом, вроде адрес нормальный выдался, но в интернеты ходить почему-то не получается.

Traceroute вообще никуда не доходит, даже до pfsense’а.
Запустил ip route show, и офигел: default route почему-то не в этот pfsense, а в какой-то совершенно другой IP, которого в этой сетке вообще нету..
А ip address show показал, что на eth0 кроме адреса, выданного pfsense’ом, есть ещё один, из той сетки, где этот непонятный default gateway..

Попробовал повыключать-повключать eth0, ничего не поменялось. Ну, то есть, когда выключал, все адреса и маршруты пропадали, а когда обратно включал – появлялись те же два адреса, и default route в тот же несуществующий gateway.

Посмотрел в /etc/network/interfaces – там ничего нету. Запустил гномовский конфигуратор NetworkManager‘а – там всё настроено чисто по DHCP, никаких дополнительных адресов нету.

Решил поискать, где оно ещё может быть – запустил в /etc grep того загадочного IP, и.. он нашёлся в /etc/NetworkManager/system-connections/Wired connection 1 :
[ipv4]
method=auto
address1=10.12.1.38/24,10.12.1.1

Но в гномовском сетевом конфигураторе ничего подобного почему-то не видно.. А если уж Network Manager взял из этого конфига статический адрес и gateway, так какого ж хрена он на тот же интерфейс прицепил ещё и DHCP’шный адрес??

Короче, удалил нафиг этот address1, всё заработало..

Read the rest of this entry » )

Оригинал этой записи в личном блоге.

dil: (Default)
Tuesday, August 15th, 2017 07:42 pm

Пару недель спокойно вносил изменения в тот pfsense, про который я писал в конце июля. Обычно всё сразу срабатывало, как и полагается.

А иногда при применении внесённых изменений pfsense почему-то перегружался.. Но потом всё же успешно загружался и продолжал работать.

А вот сегодня после внесения очередного мелкого изменения — пропал.. Я ждал минут пять, а он так и не появился. Заполз в него через консоль, и оказалось, что там опять IP-адреса на всех сетевых интерфейсах потерялись. Пробовал подсовывать прежние варианты конфигов из его бэкапной директории и перегружать — а фиг, всё то же самое, при загрузке не может разобрать этот xml, потому и не знает, какие адреса приделывать.

Хотя когда я вручную приделал ему адрес (ifconfig’ом) и маршрут (route’ом), и зашёл в его веб-интерфейс, то там у него все настройки успешно виделись, в том числе и для сетевых интерфейсов. То есть, там этот конифг успешно читается, а в процессе загрузки почему-то нет..

Потом попробовал как в прошлый раз factory reset, настроил сетевые параметры, а после перезагрузки он их из этого совсем маленького свежесозданного конфига всё равно почему-то прочитать не может. Вот же уродские быдлокодеры..

Начальник предложил обновить его до свежей версии, раз старая всё равно не работает. Приделал опять сетевые параметры руками, запустил апгрейд, всё скачалось, поставилось, а после перезагрузки опять сети нету.. Пробовал подсовывать прежние конфиги — при загрузке всё равно вылезают ошибки чтения этих xml’ей.

Потом ещё попробовал подложить туда однозначно рабочий конфиг от новой версии (со своей виртуалки, где я экспериментировал с обновлением старой версии pfsense до нынешней). А всё та же фигня — не может этот xml прочитаться в процессе загрузки, хотя в веб-интерфейсе вполне может. Но и при попытке через веб-интерфейс что-то слегка поменять, чтоб конфиг заново переписался, всё равно вылезает хрень:

Или ещё больше:
Fatal error: Cannot create references to/from string offsets nor overloaded objects in /etc/inc/xmlparse.inc on line 103 Call Stack: 0.0001 245880 1. {main}() /usr/local/www/vpn_ipsec_phase1.php:0 0.0943 4425904 2. write_config() /usr/local/www/vpn_ipsec_phase1.php:550 0.6794 4967024 3. cleanup_backupcache() /etc/inc/config.lib.inc:593 30.6301 8763792 4. parse_xml_config() /etc/inc/config.lib.inc:859 30.6302 8764280 5. parse_xml_config_raw() /etc/inc/xmlparse.inc:178 31.5878 11278400 6. xml_parse() /etc/inc/xmlparse.inc:217 31.5878 11278776 7. startElement() /etc/inc/xmlparse.inc:217 PHP ERROR: Type: 1, File: /etc/inc/xmlparse.inc, Line: 103, Message: Cannot create references to/from string offsets nor overloaded objects

Видать, там не всё обновилось, а какие-то кривые старые скрипты ещё остались и продолжают поганить систему.

Тогда уже решил плюнуть на старую версию, и попробовал не обновлять, а поставить новую версию с нуля. Поставилась, сеть в порядке. Потом подложил туда конфиг со старой машинки, и он успешно прочитался и сработал.

То бишь, грабли, как водится, удалось обойти, но опять практически весь день на эту фигню пришлось потратить. А потом начальник попросил и второй тамошний маршрутизатор таким же образом заново поставить, а не обновлять старый. Но на это сегодня уже времени не хватило, завтра займусь.

Оригинал этой записи в личном блоге.

dil: (Default)
Wednesday, August 2nd, 2017 03:38 pm

Позавчера попробовал поставить у себя на десктопе в virtualbox’е виртуальную машинку с pfsense’ом, чтобы проверить, где он глючит. Но скопировать оригинальный диск с VMware’ного сервера не удалось — типа, ошибка случилась. Непонятно какая.. Короче, пришлось установить заново с нуля, и скопировать туда конфиг с той рабочей машинки.

Pfsense’овые WAN и LAN прикрутил к виртуальным host-only сеткам, чтоб можно было туда зайти с десктопа. Зашёл и по ssh, и через веб, стал менять настройки VPNов.
Дефектов в config.xml не случилось, но некоторые изменения почему-то внезапно вызывали перезагрузку машины.. Хотя после перезагрузок она нормально читала свой конфиг и успешно запускалась.

А вчера начальник предложил проапгрейдить этот тестовый pfsense до свежей версии, чтобы проверить, будет ли и там глючить. Но для этого виртуальную машинку нужно было прицепить к интернетам, чтоб она скачала себе новую прошивку. Казалось бы, это элементарно, но.. как всегда, встретились грабли.

Первым делом попробовал на десктопе прикрутить NAT через eth0 к тому host-only интерфейсу vboxnet0, на котором у десктопа как раз и был адрес gateway, использовавшийся pfsense’ом. Но почему-то не сработало. Похоже, эти vboxnet’ы управляются только virtualbox’ом, а нормальные сетевые утилиты на них не работают.

Потом попробовал соединить в бридж pfsense’овый WAN с десктопным eth0. Это, естественно, тоже не сработало, потому что у pfsense’а там был статический публичный адрес из своей сети, и она использовала в качестве gateway адрес из той же сети, которого в местной сетке вовсе не было.

Ну, отключил там на WAN статический адрес, включил DHCP, pfsense получил адрес из местной сетки и правильный gateway, но.. почему-то всё равно никуда соединиться не мог. Запустил tcpdump, и оказалось, что несмотря на полученный по DHCP адрес, pfsense почему-то отправлял пакеты наружу со своего публичного CARP-адреса, который тоже был из той же публичной сети, потому он в местной сетке не работал: пакеты наружу не проходили, но даже если б прошли, ответы бы всё равно не вернулись.

Попробовал выключить в pfsense этот CARP-адрес, а не дают — типа, он используется в настройках многих VPN’ов, поэтому нельзя его удалить..

Выходит, надо использовать тот статический адрес и NAT’ить его самим virtualbox’ом. Вернул адрес, прицепил WAN к virtulabox’овому NAT, — тоже не работает. Кажись, virtualbox там свои адреса использует, из 192.168..

Тогда создал в virtualbox’е отдельную NAT Network, явно приписав туда сетку, которую использовал pfsense, и на стороне сервера приделал туда адрес gateway. А фиг, всё равно наружу не ходит, и даже этот gateway не пингается, хотя он там точно должен быть.

Долго думал, как бы всё же организовать связь с интернетами. Разве что поставить туда ещё одну виртуальную машинку в качестве gateway, и на ней организовать NAT.. Но приделывать к маршрутизатору дополнительный маршрутизатор — это ж бред..

В конце концов грабли удалось обойти следующим образом:

Read the rest of this entry » )

Оригинал этой записи в личном блоге.

dil: (Default)
Friday, July 28th, 2017 07:26 pm

Сегодня опять настраивал VPNы на том же pfsense, что вчера и позавчера. Сначала один новый приделал. Потом вместо того, чтоб перенастроить тот, который вчера вызвал дурацкую проблему, удалил его нафиг и создал заново. И вроде как всё успешно сработало, ничего не сломалось.

А потом в первом приделанном VPNе отключил DPD (dead peer detection), и после сохранения опять те же грабли — pfsense завис нафиг, а после перезагрузки не смог приделать IP-адреса к сетевым интерфейсам. Пришлось, как и вчера, запустить reset, потом подложить прежний конфиг из backup’ной директории — а фиг, всё равно не работает. Потом попробовал парочку других конфигов, но всё равно не помогло.

В конце концов скопировал все конфиги из backup’а на другую машинку и стал рассматривать, в чём различия. И тут наконец-то обнаружилась причина этих граблей: в нескольких конфигах (а они в XML’ном формате) нашлась идиотская штука, которая, собственно, и разваливала эти xml’и:

        <remoteid>
            <type>address</type>
            <address>10.11.12.13</address>
        </remoteid>
    rithm-option>
        <pfsgroup>0</pfsgroup>

Похоже, это обрезанный кусок <encryption-algorithm-option> , но вот как он туда попал, и как продолжал там иногда оставаться при перезаписывании конфига — это загадка. Явно криворукие похапэшные быдлокодеры виноваты.

Потом подложил более старый конфиг, в котором этой фигни ещё не было, и pfsense наконец заработал. А DPD подредактировал в том конифге руками, сработало.

Ну, короче, как водится, грабли удалось обойти, но на это потратился почти весь рабочий день. А главное — непонятно, как их в будущем избежать. Все изменения в xml руками вписывать не сильно просто. А в командной строке там тот же php используется, так что есть шанс получить те же (или даже ещё более кривые) грабли.

Оригинал этой записи в личном блоге.

dil: (Default)
Thursday, July 27th, 2017 11:58 am

Вчера один коллега сделал элементарные изменения в настройках маршрутизатора (pfsense). После чего этот pfsense завис нафиг. Я попробовал его перегрузить, всё равно не отзывается. Пришлось подключиться к консоли и внимательно смотреть, чё там не так. (Машинка виртуальная, поэтому подключиться к её консоли оказалось относительно просто, а вообще-то она в Кении..) Оказалось, что сам маршрутизатор вполне себе грузится, но почему-то IP-адресов на сетевых интерфейсах нету. Посмотрел в конфиг — адреса на месте. Перегрузил ещё раз, а они опять пропали. На консоли обнаружилась очень странная ошибка: “PHP Fatal error: Cannot create references to/from string offsets nor overloaded objects in /etc/inc/xmlparse.inc on line 77“..

Посмотрел в этот xmlparse.inc, а это оказался скрипт на PHP. Сравнил его с таким же файлом на другом pfsense, который успешно работает — файлы совершенно одинаковые. Проверил изменения в config.xml – немножко действительно есть, но формат файла вполне нормальный. Подложил прежнюю версию конфига, перегрузил pfsense – опять та же ошибка. Попробовал более старую версию конфига подложить, где ещё не было вчерашних изменений, а фиг — всё то же самое..

После этого начальник предложил запустить на этом pfsense reset, а потом приделать IP-адреса заново. Попробовал — вышло. Но всё остальное заново руками конфигурировать не хотелось, поэтому попробовал опять подложить старый конфиг, и внезапно он успешно прочитался, и всё заработало.

А сегодня решил сам попробовать поменять то, что вчера менял коллега. Через веб-интерфейс. В натуре, мелочи в настройках одного VPN: IKEv1 на Auto, hash с sha512 на sha1, DH group с 16 на 2. Аблин, опять те же грабли!

pfsense опять перестал отвечать, и после перезагрузки опять показывал на консоли ту же ошибку, и не мог прицепить IP-адреса к сетевым интерфейсам. Пришлось, подсунуть вчерашний полупустой config – он заработал. Потом подложил старый конфиг с полными настройками – тоже заработал.

Ну какого хрена эти PHPшные быдлокодеры пишут такой дурацкий софт?! Изменения, сделанные через ихний же веб-интерфейс, оказываются настолько кривыми, что потом весь конфиг не может прочитаться. Короче, нафиг этот pfsense. Пожалуй, надо переезжать на более приличные системы. Может, на какой-нибудь VyOS. Хотя у него web-интерфейса нет, но и таких граблей тоже нет.

Оригинал этой записи в личном блоге.

dil: (Default)
Wednesday, November 30th, 2016 01:35 pm

Юзеры стали жаловаться, что не могут подключиться к одному OpenVPN-серверу. Ко всем остальным нормально, а к этому никак не получается. Проверял их конфиги, вроде всё правильно, посмотрел на сервер (он под pfSense работает), вроде тоже всё нормально. В логи посмотрел — никаких ошибок нету.

Попробовал сам подключиться — да, в натуре, не работает.. А раньше работало. Посмотрел в свой лог, сервер вполне себе отвечает, соединение устанавливается, аутентификация по SSL проходит, но потом соединение мгновенно рвётся. Клиент ещё три раза пытается соединиться — всё то же самое, соединение устанавливается и мгновенно рвётся Ну и потом клиент выключается.

Пошёл сравнивать настройки с другими серверами, где работает. Вроде как всё примерно одинаково, но там работает, а тут нет. Потом случайно нашёл на том же pfSense ещё один OpenVPN, на другом порту, типа, для служебного пользования, а не для юзеров. Попробовал подключиться к нему — работает! Начал внимательно сравнивать конфигурации, разница оказалась в том, что у неработающего сервера в конфиге был указан Certificate Revocation List, а у работающего — нет. Ясное дело, надо проверить, нет ли там лишних сертификатов. Хотя непонятно, кто и зачем мог бы их туда добавить. Скопировал CRL к себе в файлик, запустил openssl crl -in a.crl -text, а он, блин, ругнулся:
unable to load CRL
140046118483600:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: X509 CRL

Погуглил, как должен выглядеть этот файл в PEM-формате, посмотрел в файл, там в первой строчке ------BEGIN X509 CRL-----, в последней -----END X509 CRL-----, посредине что-то закодированное в base64, вроде всё как надо, а openssl’ю что-то не нравится..

Ну, высококвалифицированные сисадмины, кто понял, что тут не так??
Отгадка, как обычно, под катом.

Read the rest of this entry » )

Оригинал этой записи в личном блоге.

dil: (Default)
Monday, November 14th, 2016 01:51 pm

Сегодня с утра начали поступать жалобы, что наши приложения в одном из датацентров периодически не могут достучаться до нужных им серверов. И клиенты, типа, жалуются на то же самое – что периодически не могут достучаться до наших тамошних серверов.

Ну я первым делом проверил живость наших машинок – количество процессов, загрузку процессоров, отсутствие проблем с дисками, но вроде всё в норме. Попробовал оттуда позапускать telnet, traceroute, tcptraceroute в сторону нужных серверов — и в натуре, то работает, то не работает. Ощущение такое, что где-то по дороге сеть перегружена, и оттого пакеты частично пропадают. Причём пропадают прямо сразу, traceroute иногда даже первого хопа не видит, хотя это наш собственный маршрутизатор на pfSense. Зашёл на него, процессор не сильно загружен, памяти хватает, своп вообще не используется, диск полупустой, трафик не сильно большой. На всякий случай спросили у провайдера, он прислал примерный график входящего/исходящего трафика за последние сутки, так вообще мелочи, меньше мегабита в секунду.

Итак, вопрос: попробуйте угадать, что там случилось, и как его починить.

Ответ под катом.

Read the rest of this entry » )

Оригинал этой записи в личном блоге.

dil: (Default)
Friday, September 2nd, 2016 11:36 pm

Как неоднократно замечал dmarck, мне давно надо было переквалифицироваться из сисадмина в тестера. Ибо я наступаю на такие грабли, которых остальные почти никогда не замечают.

Недавно настраивал очередной IPsec-туннель. Казалось бы, чего тут может быть сложного..
Но когда я попробовал попингать c местной машинки клиентскую — не получилось. Запустил на этом pfSense tcpdump, он показал, что гейты друг с другом общаются, первая фаза вроде как нормально отрабатывает, значит пароль точно правильный, потом проходит несколько пакетов второй фазы, а потом всё резко замолкает..

Посмотрел в логи — и вправду, первая фаза успешно проходит, потом во второй фазе посылается предложение SA, а с той стороны в ответ приходит DELETE for IKE_SA. Чем-то, значит, ихней циске эта SA настолько не нравится, что она её не просто игнорирует, а вообще предлагает всё закрыть. Сравнили IPsec’овые конфиги, вроде всё одинаковое. Но не работает. Долго думал, что может быть не так, ничего не придумал.

Read the rest of this entry » )

Оригинал этой записи в личном блоге.