vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Наверняка многие из моих читателей пользуются OpenVPN и точно знаю что многие любят продемонстрировать (особенно в кругу истинных ценителей, которыми являются читатели этого журнала) свою крутость в решении IT-задач.

Поэтому предлагаю вниманию читателей несколько парочку нетривиальных ТЗ на конструкцию на базе OpenVPN,


Задача 1:

Имеется машина A, подключенная к локальной сети, для которой она является DHCP и DNS сервером, а также default gateway (используются ISC dhcpd и BIND). Имеется машина B, стоящая на хостинговой площадке у провайдера и работающая помимо всего прочего opevpn-сервером (для прочего на ней тоже есть bind). Удостоверяющий сервер, выписывающий сертификаты для клиентов OpenVPN-сервера B расположен на машине A.

Машина A практически постоянно поддерживает VPN соединение с машиной B. Канал широкий, безлимитный, но иногда падает (типичный мегаполисный броадбанд-провайдер).

Имеется несколько ноутбуков N1, N2, N3...
которые могут подключаться либо в локальную сеть A, либо, подключившись к интернету через стороннего провайдера, устанавливать VPN-соединение с B.

Требуется обеспечить: чтобы независимо от того, как к данной конструкции подключен ноутбук Ni, он со всех прочих узлов этой сети (включая A, B и все Nj где i!=j) был виден под одним и тем же доменным именем (в домене, primary DNS которого расположен на A). А желательно, чтобы еще и под тем же IP-адресом.

В случае если канал между A и B лежит, в обоих половинках, на которые распалась сеть, все должны видеть друг друга под теми же именами (опционально адресами), включая те Ni, которые подключились после падения канала.

Желательно предложить решение не использующе TAP и режим server-bridge в OpenVPN.

Upd Конфигурация ноутбуков должна быть стандартная. Никакого софта кроме станадртного dhcp-клиента (кстати не всегда умеющего работать с client-id) и собствнено openvpn с файлами конфигурации (включая сертификаты) туда не ставится.


Призовая игра 1а:

Имеется еще и локальная сеть C, которая всем похожа на A, только канал от нее до B дорогой и неустойчивый (3G)

Требуется обеспечитьт чтобы Ni видели друг друга по тем же именам без гоняния всего траффика до B и обратно. И чтобы никаких действий по администрированию на C предпринимать не приходилось, она сама при появлении связи с B тащила все настройки с A.


Призовая игра 1б:
C - это не полноценный компьютер а точка доступа. Решение должно укладываться в ее маленькую флэш-память.



Задача 2
Имеется корпоративная сеть компании X, в котрую предоставляется openvpn-доступ сотрудникам. У компании X есть домены X.com Y.ru и Z.ru. Внутренние хосты локальной сети компании X имеют адреса в этих доменах. (без вынесения в отдельные поддомены). Естественно настроено так, что на внутренних DNS-серверах, в том числе и том, который отдается openvpn-клиентам, имена хостов локальной сети резолвятся (в серые IP), а внешние NS сервера этих доменов говорят "не знаю такого".

openvpn-сервер, через который можно попасть из дома в локальную сеть компании X, имеет доменное имя в одном из этих доменов (естественно, резолвящееся внешними DNS-серверами)

На машние А сотрудника данной компании установлен BIND. такой полноценный развестый bind, который обслуживает парочку известных всему интернету доменов, домен локальной квартирной сети в которую включена эта машина etc.

Требуется сочинить такие up- и down скрипты для openvpn, чтобы если openvpn- туннель в корпоративную сеть был поднят, пользовательские приложения на машине A резолвили внутренние хосты корпоративной сети. А если туннель опущен то выполнялся бы честный рекурсивный поиск по общедоступным серверам. Вносить какие-либо изменения в конфигурацию DNS серверов компании X и ее VPN-сервера, естественно, запрещено.

Имеется нескоько корпоративных сетей, которые могут подниматься и опускаться в произвольном порядке. Внутренние хосты всех функционирующих сетей должны резолвиться.

Date: 2011-08-19 10:57 am (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Адрес, под которым должэн быть виден ноутбук, прописать ему статически на loopback. Ноутбуки перманентно подключить через OpenVPN к B. Повесить везде кваггу, пусть она через IBGP друг с другом объясняется и ковыряет таблицы роутинга A/B/ноутов, чтобы вычислить, через кого ближэ идти пакетам на этот ноут и обратно(OpenVPN B/direct A). Разумеется, OpenVPN-соединению сразу расстояние 2 выставить, чтобы если можно без него -- ходило без него.

PS на самом деле я не настоящий сварщик, BGP поднимал только один раз, притом это был EBGP, на цыске, и на самом деле не приходя в сознание (там от него ничего не нужно было по большому счёту). Возможно, что в данном случае хватит и какого-нибудь RIPD (хотя он по-моему с броадкастами, у меня от них всегда зубы болят). Или ospfd.

PPS Впрочем, quagga в OpenWRT занимает 70k, bgp к ней 275k, ospf 240k, rip 35k. Приемлемо, на мой взгляд, для точки доступа.

Да, задача 2 не имеет нормального решэния из-за кэша. Ненормальное -- это, например, приделать в качестве первого forwarders на адрес внутрикорпоративного dns-а (для требуемых доменов), вторым forwarders -- адрес сервера какого-нибудь гугля (можно ещё второй bind у себя жэ повесить на отдельном порту, если гуглю не доверяешь), iptables -j REJECT если пакет на такой адрес попытается выйти во внешний мир (чтобы DNS-сервер быстрее понимал, что надо идти на другие сервера, если роутинга во внутрикорпоративную сеть нет). Но с кэшом будет всё равно неприятно, хоть сбрасывай его по передёргиванию OpenVPNа.

Date: 2011-08-19 01:08 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Не надо почётного, я вид на жытельство хочу. А по делу -- как говорится, вперёд, устраивайте из анонсов dhcp новый протокол управления роутингом. Но диплом Вам выдадут таки первому.

Date: 2011-08-19 01:48 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Ну что, подписался -- так выписывай. Торжэственное вручение как-нибудь организуем (если ничего не выдастся -- то на дне рождения клуба).

Date: 2011-08-19 01:57 pm (UTC)
allter: (Default)
From: [personal profile] allter
Интересно, а можно в схеме с демонами маршрутизации обойтись без явной таблицы маршрутизации на ноутах, т.е. установкой демонов только на A и C? Т.е. Ni будут получать свой ip в локалке через vpn-сервер на B или по dhcp от A/C, а демоны на A/C будут брать признак присутствия Ni в локалке по arp-кэшам, к примеру? Если перефразировать мой вопрос, то можно ли в демоны маршрутизации передавать данные о доступных локально хостах динамически?

Date: 2011-08-19 01:58 pm (UTC)
allter: (Default)
From: [personal profile] allter
err: "можно ли обойтись установкой демонов только на A, B и C, т.е. на статические элементы инфраструктуры", конечно.

Date: 2011-08-19 01:59 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Ну, если dhcp-клиент будет подчищать за собой маршруты -- то почему бы и нет. Не знаю только, подчищают ли они реально (по-моему, дажэ прописывание на самом деле происходит не в сишном коде, а во скриптах -- так что ничего не возможного).

Date: 2011-08-19 11:08 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
proxy-arp требует ethernetа, я как-то прикидывал -- получалось, что нужэн как минимум TAP межу A и B.

Date: 2011-08-19 11:43 am (UTC)
From: [identity profile] avryabov.livejournal.com
задача 1 - а чем не нравится tap и бриджевание?
Если я что-либо понимаю это как раз тот случай.
Впрочем tap я всегда использую, ибо с ним роутинг намного проще выходит.
Бриджевание пока не юзал.

1b - а openvpn клиент на С есть?

Date: 2011-08-19 12:18 pm (UTC)
From: [identity profile] avryabov.livejournal.com
Может и скучно. Зато правильно.
Сомневаюсь в необходимости второго dhcp сервера, ибо openvpn сервер - вполне себе сам dhcp сервер. Надо будет прописать на A жесткую привязку ip по mac,
а на B ip по имени машины. И так, чтобы они совпадали.
к тому же бриджинг-то будет на клиенте А. (если я хоть что-то в нем понимаю.)

1b - ну если есть, то какая разница по сравнению с первым случаем?

Date: 2011-08-19 01:55 pm (UTC)
From: [identity profile] avryabov.livejournal.com
почитал малость про бриджинг.
server-bridge нафиг не нужен, ибо на B нету разделяемого эзернета. (a B у нас как раз сервер) достаточно tap и client-to-client
A вот на А надо будет запустить бридж ручками между эзернетом и tap, после подъёма openvpn.

Date: 2011-08-19 02:03 pm (UTC)
From: [identity profile] avryabov.livejournal.com
Только не ручками, а из up-скрипта.
Да, именно. Я имел в виду что не командами openvpn, а внешними командами.
А настройка DHCP на А и раздача адресов на B openvpn сервером таки сохраняется.

Date: 2011-08-19 02:34 pm (UTC)
From: [identity profile] avryabov.livejournal.com
по первой задаче: если ip сохранем у ноута - то только через TAP
если не сохраняем, то придется на ходу dns править когда к openvpn клиент цепляется.
в общем оба пункта "желательно" выполнить нельзя.

Date: 2011-08-20 01:23 pm (UTC)
From: [identity profile] avryabov.livejournal.com
сэр не в курсе о существовании proxy arp и route на отдельные хосты?
proxy arp - не в курсе.
Месье знает толк в извращениях.
По логике - тот же бриджинг выходит, но _гораздо_ более сложный.
Возможностей ошибиться - куча.

Date: 2011-08-19 01:06 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
А чем здесь вообще поможэт tap и бриджэвание? Ну то есть есть пакет на ноутбуке N1 -- как этот N1 поймёт, пихать его в виртуальный ethernet-OpenVPN на B или в свою локалку?

Date: 2011-08-19 01:29 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Если оно сбриджёвано в общий сегмент, то у того ноутбука будет торчать два ethernetа в одном сегменте. Вы уверены, что хотите продолжать?

Ладно, продолжым. После этого во-первых, весь бродкаст трафик локалки точки A будет литься в каждый B-OpenVPN (включая тех несчастных, которые сидят в Маниле через роуминг, ха-ха).
Во-вторых, реальный путь пакета будет зависеть от погоды на марсе. Точнее, конечно, во-первых от скорости и потерь пакетов в каждой сетке -- но во-вторых от устаревания MAC-кэшэй тех линуксовых бриджэй. Так что с большой вероятностью пакеты между двумя ноутбуками в соседних комнатах с гигабитными портами будут бегать аккурат через пол-интэрнета от A до B.

Ну, и в-третьих, тебе придётся всё локалку на точке А пихать в один сегмент. Если там 5 розеток -- то это нормально. Если 40 и некоторое количество тупых D-linkов -- то это практически гарантия ежэгодного праздника «ищем кольца».

Date: 2011-08-19 02:01 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
>Если ноутбук в локальной сети, то у него есть только один
> езернет.

А куда у него денется ethernet, который предоставил ему OpenVPN?

Date: 2011-08-19 01:45 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Кстати, предыдущий ответ я написал как-то неподумав. Поскольку более правильным было бы задать всё тот жэ вопрос:

>есть пакет на ноутбуке N1 -- как этот N1 поймёт, пихать его в
> виртуальный ethernet-OpenVPN на B или в свою локалку?

Естественно, тот факт, что сначала этот вопрос надо решыть для arp-пакета с N1 -- ничего совершэнно не меняет. И тот факт, что на самом деле arp-пакета ещё нет, его надо сначала сформировать, при этом ужэ зная куда пихать -- только усложняет детали.

Так куда пойдёт arp-пакет?

Или Вы и OpenVPN на ноутбуке засунули в один бридж с Ethernet? Ну, тогда, натурально, удачи -- во-первых, без STP такое количество колец работать не будет вообще, во-вторых роутингом по факту займёся именно STP из линуксового ядра, а в-третьих, как (с какой скоростью и какой вменяемостью) STP занимается роутингом Вам предстоит узнать на практике. Будет весело, я гарантирую.

Date: 2011-08-19 02:06 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
>если мы уже в локалке, то нахрена нам VPN?

Что значит нахрена? А куда он денется-то? Вы его что, руками выключать собрались?

Не, тогда конечно всё элементарно -- а заодно можно ещё всяких скриптов для ручного подключения/отключения к локалке написать. Какая разница, запускать sudo /etc/init.d/openvpn stop или sudo ~/locip.sh. Но от Вас я такого не ожыдал.

Date: 2011-08-19 12:34 pm (UTC)
From: [identity profile] captain-hell.livejournal.com
Очень просто. Всегда подключать узлы через openvpn. Всегда маршрутизировать через openvpn.

Второе. Настроить себя кеширующим DNS корподнсов. Использовать свой днс. Не вижу проблем в том, что в некоторое время хост в X будет резолвится, но не будет маршрутизироваться...

Date: 2011-08-19 12:39 pm (UTC)
From: [identity profile] captain-hell.livejournal.com
1. через локальную сеть? в чем проблема?
2. для vpnserver можно использовать другой днс, например.

Date: 2011-08-20 10:11 am (UTC)
From: [identity profile] captain-hell.livejournal.com
Я не выключаю опенвпны на своих девайсах. В домашней сети пакеты сами завернутся на локалку, минуя ethernet.

Езернет не вдвое быстрее вайфая, а вдесятеро...

Date: 2011-08-19 02:13 pm (UTC)
From: [identity profile] avryabov.livejournal.com
1. эти пакеты чтобы добраться с одного до другого ноута в пределах локалки сначала зашифруются в ovpn на ноуте N1,
потом по локалке пойдут до A,
(шифруются еще раз???)
пойдут до сервере B
там дешифруются (2 раза???) и снова шифруются (2 раза???)
пойдут на A,
(дешифруются ???)
потом на ноут N2
и еще раз дешифруются.

И трафик дикий по каналу A-B, и куча перешифровок которые вообще не нужны.

Date: 2011-08-19 01:20 pm (UTC)
From: [identity profile] begemotv2718.livejournal.com
Ну, может тогда попробовать #include в named.conf файл, в котором мы внешним скриптом прописываем форвардеры когда поднимаем vpn? C последующим rndc reload? Если я, конечно, еще правильно помню, что делает rndc reload

Date: 2011-08-19 06:03 pm (UTC)
From: [identity profile] avnik.livejournal.com
Кстати еще задача для "призовой игры"

Есть ноутбук в квартире у которого
1 есть ethernet, который мы считаем безопасным.
2 есть wifi который мы не считаем безопасным, и гоняем поверх него openvpn

Остальное как в задаче выше -- прозрачный доступ, и желательно прозрачное же переключение -- я не хочу чтобы у меня X приложение схлопнулось от того что я выдернул ethernet.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

April 2026

S M T W T F S
    123 4
5 6 7 89 1011
12 131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 14th, 2026 03:35 am
Powered by Dreamwidth Studios