Есть три сети по /24. Между собой сети соединены только через интернет, LAN как таковая отсутствует (просто компьютеры — маршрутизатор — интернет). Нужно их объединить. Если я поставлю один сервер OpenVPN в одной сети, то две другие будут соединяться через тот сервер, а не напрямую, что нехорошо. Как можно сделать так, чтобы все машины оказались в одной виртуальной сети, и чтобы трафик всегда ходил по кратчайшему пути? Сделать три сервера OpenVPN, осилить IPSec или еще что-нибудь?
Важно, чтобы при проблемах с одной из сетей остальные продолжали работать.
Есть три сети по /24. Между собой сети соединены только через интернет, LAN как таковая отсутствует (просто компьютеры — маршрутизатор — интернет). Нужно их объединить. Если я поставлю один сервер OpenVPN в одной сети, то две другие будут соединяться через тот сервер, а не напрямую, что нехорошо. Как можно сделать так, чтобы все машины оказались в одной виртуальной сети, и чтобы трафик всегда ходил по кратчайшему пути? Сделать три сервера OpenVPN, осилить IPSec или еще что-нибудь?
пусть A — сервер первой сети, который дает ей интернет и имеет реальный IP адрес; A1, A2 итд — компьютеры этой сети. B — сервер второй сети и так далее
Небезопасный вариант:
сервер A — роутинг пакетов для сети B на сервер B, для сети C на сервер C; роутинг пакетов от серверов B и С внутрь сети A. NAT
сервер B — роутинг пакетов для сети A на сервер A, для сети C на сервер C; роутинг пакетов от серверов A и С внутрь сети B. NAT
сервер C — роутинг пакетов для сети A на сервер A, для сети B на сервер B; роутинг пакетов от серверов A и B внутрь сети C. NAT
Безопасный вариант — то же самое, но OpenVPN от A к B и C, от B к А и С, от С к А и Б.
Это простейшие варианты на вскидку.
в результате если компьютер A1, 192.168.1.10 хочет отослать пакет компьютеру B1, 192.168.2.10:
— пакет попадает на A, дефолтный шлюз A1
— в соответствии с роутингом, пакет обрастает NAT и уходит к B
— B получает пакет от A, в соответствии с роутингом отправляет его B1 (не помню, будет ли на входящие NAT использоваться)
— B1 получает пакет, отвечает на него.
— ответный пакет попадает на B, дефолтный шлюз B1
— в соответствии с роутингом, ответный пакет уходит к A (здесь тоже не помню будет ли NAT использоватья)
— A получает ответный пакет от B, смотрит на свой NAT, умиляется, снимает с пакета NAT и отсылает пакет A1
Есть три сети по /24. Между собой сети соединены только через интернет, LAN как таковая отсутствует (просто компьютеры — маршрутизатор — интернет). Нужно их объединить. Если я поставлю один сервер OpenVPN в одной сети, то две другие будут соединяться через тот сервер, а не напрямую, что нехорошо. Как можно сделать так, чтобы все машины оказались в одной виртуальной сети, и чтобы трафик всегда ходил по кратчайшему пути? Сделать три сервера OpenVPN, осилить IPSec или еще что-нибудь?
EOH>пусть A — сервер первой сети, который дает ей интернет и имеет реальный IP адрес; A1, A2 итд — компьютеры этой сети. B — сервер второй сети и так далее
Все компьютеры имеют «реальные» (не из RFC 1918) IP-адреса и никаких других.
Если бы у них были адреса вроде 10.0.1или2или3.0/24, тогда бы я просто сделал push route в OpenVPN, это даже в их howto описывается. Наверное, вопрос сводится к тому, как бы им приделать такие адреса? Если я на каждом компьютере посоздаю по подинтерфейсу вроде eth0:0, которым приделаю внутренние IP, и настрою роутер, чтобы он пакеты со «своими» внутренними адресами отправлял по назначению сам, а в другие подсети слал соответствующему клиенту OpenVPN, заработает?
Просто всё это хозяйство от меня далеко, если испорчу сетевые настройки, сам не починю, хочется быть уверенным :-)
Здравствуйте, Roman Odaisky, Вы писали:
RO>Все компьютеры имеют «реальные» (не из RFC 1918) IP-адреса и никаких других. RO>Просто всё это хозяйство от меня далеко, если испорчу сетевые настройки, сам не починю, хочется быть уверенным
То есть каждый компьютер каждой сети имеет свой индивидуальный статический реальный интернет адрес?
Тогда Вам надо только фаерволы настроить.
Здравствуйте, VPI, Вы писали:
RO>>Все компьютеры имеют «реальные» (не из RFC 1918) IP-адреса и никаких других.
VPI>То есть каждый компьютер каждой сети имеет свой индивидуальный статический реальный интернет адрес?
Имеет.
VPI>Тогда Вам надо только фаерволы настроить.
Не хватает шифрования при обмене данными между сетями. Если я воспользуюсь IPSec, то трафик будет шифроваться весь без исключения, а это лишнее, потому что каналы всего лишь T1. OpenVPN умеет соединять подсети, но оставляет при этом адреса неизменными, а я хочу, чтобы я мог обратиться к компьютеру 333.333.333.333 как по этому адресу (без шифрования), так по адресу, скажем, 10.0.3.333 (с шифрованием). Опять же, часть служб будут привязываться ко всем интерфейсам, а часть — только ко внутренним, для безопасности (понятно, что этого же можно добиться файрволлом, но сложнее).
Хотя, может, получится иначе? Есть ли возможность в iptables управлять тем, какой трафик должен идти через IPSec, а какой обычным образом? Тогда можно было бы исключить 22-й порт, и еще пару правил задать.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Если я воспользуюсь IPSec, то трафик будет шифроваться весь без исключения
А вот это не верно. Читай про селекторы.
Здравствуйте, DOOM, Вы писали:
RO>>Если я воспользуюсь IPSec, то трафик будет шифроваться весь без исключения DOO>А вот это не верно. Читай про селекторы.
Тогда как мне сделать, чтобы каждый компьютер не пытался использовать IPSec в пределах своей подсети, и, скажем, по порту 22? В setkey можно задавать порт, но непонятно, как задать все порты, кроме данного.
Получается, я наделаю ключей X.509, укажу, какие кому соответствуют, а что за политики создавать?
1.1.1.42:/etc/ipsec-tools.conf
spdadd 1.1.1.42[any] 2.2.2.0/24[все, кроме 22] any -P out ipsec esp/transport//require;
spdadd 1.1.1.42[any] 3.3.3.0/24[все, кроме 22] any -P out ipsec esp/transport//require;
# аналогично для -P in
Вы бы вопрос сформулировали . Потому что если у всех ваших компьютеров реальные IP адреса, то:
Есть три сети по /24. Между собой сети соединены только через интернет, LAN как таковая отсутствует (просто компьютеры — маршрутизатор — интернет). Нужно их объединить
Они уже объединены
Как можно сделать так, чтобы все машины оказались в одной виртуальной сети, и чтобы трафик всегда ходил по кратчайшему пути?
Они уже в одной сети. Интернет называется (. Трафик уже ходит по кратчайшему пути. Маршрутизация на роутерах и у провайдеров называется ((.
Вообщем что Вам надо абсолютно непонятно. Вы бы хоть какой нить пример привели. Например "хочу, чтобы после выполнения команды ping 1.1.1.1 компьютера первой сети, имеющего IP адрес 212.44.130.2, компьютер второй сети, имеющий IP адрес 114.48.16.3 автоматически подключался к USB кофеварке и варил кофе" .
Не хватает шифрования при обмене данными между сетями. Если я воспользуюсь IPSec, то трафик будет шифроваться весь без исключения, а это лишнее, потому что каналы всего лишь T1.
Практически нету связи между шифрованием траффика и каналом. IPSec в транспортном режиме, насколько я помню, вообще не дает дополнительного траффика. При чем тут Т1?
OpenVPN умеет соединять подсети, но оставляет при этом адреса неизменными
Вы не обижайтесь только, но Вы это сами придумали или где-то прочитали? OpenVPN замечательно выдает 192.168.0.20, настраивает роутинг и все живут долго и счастливо .
OpenVPN умеет соединять подсети, но оставляет при этом адреса неизменными
EOH>Вы не обижайтесь только, но Вы это сами придумали или где-то прочитали? OpenVPN замечательно выдает 192.168.0.20, настраивает роутинг и все живут долго и счастливо :).
Сервер выдает виртуальные адреса клиентам. А если нужно, чтобы клиенту была видна сеть, которую видит сервер, то я должен сделать push route, и клиент будет видеть ее по тем же адресам, что и сервер, а это немножно не то, что нужно.
Попробую сформулировать еще раз: есть три сети с компьютерами, которые и без того замечательно общаются между собой. Только трафик между ними ходит через места, потенциально полные любопытных админов. Нужно его шифровать, только не весь, преимущественно из соображений производительности: и сети медленные, и компьютеры не самые быстрые. SSH и без того шифрованный, его еще раз шифровать излишне. (Кстати, можно ли в SSH отключить шифрование?) Внутри подсети подслушивать тоже некому, хотя, может, и не помешало бы тоже шифровать.
Хорошо бы иметь одну виртуальную сеть, к которой не было бы доступа извне, и трафик по которой ходил бы в зашифрованном виде. С IPSec трудно быть уверенным, что все важные данные ходят в зашифрованном виде, — для программы-то всё выглядит неотличимо от обычного IP. А так — повесил демона на порт на виртуальном интерфейсе, и извне его гарантированно не видно. Передаешь данные на 10.0.3.333 — зашифрованы, на 333.333.333.333 — нет.
Впрочем, IPSec проще тем, не требует возни с таблицами маршрутизации. Как бы только втолковать ему, что часть трафика хорошо бы шифровать, а часть хорошо бы не шифровать?
Сервер выдает виртуальные адреса клиентам. А если нужно, чтобы клиенту была видна сеть, которую видит сервер, то я должен сделать push route, и клиент будет видеть ее по тем же адресам, что и сервер, а это немножно не то, что нужно.
Нет конечно. Достаточно настроить роутниг между VPN серверами — и компьютеры с виртуальными адресами замечательно будут видеть друг друга.
Попробую сформулировать еще раз: есть три сети с компьютерами, которые и без того замечательно общаются между собой. Только трафик между ними ходит через места, потенциально полные любопытных админов. Нужно его шифровать, только не весь, преимущественно из соображений производительности: и сети медленные, и компьютеры не самые быстрые. SSH и без того шифрованный, его еще раз шифровать излишне. (Кстати, можно ли в SSH отключить шифрование?) Внутри подсети подслушивать тоже некому, хотя, может, и не помешало бы тоже шифровать.
Шифрование отключить нельзя, но можно использовать простой алгоритм шифрования, тот же blowfish.
Хорошо бы иметь одну виртуальную сеть, к которой не было бы доступа извне, и трафик по которой ходил бы в зашифрованном виде. С IPSec трудно быть уверенным, что все важные данные ходят в зашифрованном виде, — для программы-то всё выглядит неотличимо от обычного IP. А так — повесил демона на порт на виртуальном интерфейсе, и извне его гарантированно не видно. Передаешь данные на 10.0.3.333 — зашифрованы, на 333.333.333.333 — нет.
Впрочем, IPSec проще тем, не требует возни с таблицами маршрутизации. Как бы только втолковать ему, что часть трафика хорошо бы шифровать, а часть хорошо бы не шифровать?
А в чем проблема? www.google.com, "хачу ipsec!", на выходе подробная инструкция со скриншотами и примерами
Сервер выдает виртуальные адреса клиентам. А если нужно, чтобы клиенту была видна сеть, которую видит сервер, то я должен сделать push route, и клиент будет видеть ее по тем же адресам, что и сервер, а это немножно не то, что нужно.
EOH>Нет конечно. Достаточно настроить роутниг между VPN серверами — и компьютеры с виртуальными адресами замечательно будут видеть друг друга.
И компьютер 1.1.1.11 или не видит 2.2.2.22, или именно по этому адресу его и видит. Вот если бы он его видел напрямую как 2.2.2.22 и через VPN как 10.0.2.22, было бы замечательно.
EOH>
Впрочем, IPSec проще тем, не требует возни с таблицами маршрутизации. Как бы только втолковать ему, что часть трафика хорошо бы шифровать, а часть хорошо бы не шифровать?
Точно?
Я думал, что это выглядит так:
1.1.1.0/24 <-> 1.1.1.42 <-OpenVPN-> 2.2.2.42 <-> 2.2.2.0/24
И компьютер 1.1.1.11 или не видит 2.2.2.22, или именно по этому адресу его и видит. Вот если бы он его видел напрямую как 2.2.2.22 и через VPN как 10.0.2.22, было бы замечательно.
Точно только бог может, и то предположительно . Я обычный человек, могу ошибаться. Лично точную копию вашей задачи не решал. Если обе подсети в вашем примере подключены к одному OpenVPN серверу, тоесть у каждого из компьютеров по 2 IP: свой реальный и OpenVPN виртуальный — то все друг друга будут видеть. Если серверов OpenVPN несколько — то нужно настраивать роутинг между ними.
Я почитал много всяких мануалов, не хватает только одной мелочи: как задавать политику для всех адресов/портов, кроме заданных?
Да вообщем-то как обычно. Цитата из какой-то technote: "The Windows IP Security module automatically creates
an internal filter list and orders the filters from most specific to least specific". Так что создаем два правила. Первое — "для всех — шифровать". Второе — "а вот для этой подсети — не шифровать". Ну и вообщем-то все.
Но, ИМХО, для такой сложной задачи я бы все же порекомендовал позвать админа чтобы он все один раз настроил и показал. А потом уже и сами будете . Это будет проще по деньгам, по времени и не будет шанса где-нибудь поломать безопасность.
Я почитал много всяких мануалов, не хватает только одной мелочи: как задавать политику для всех адресов/портов, кроме заданных?
EOH>Да вообщем-то как обычно. Цитата из какой-то technote: "The Windows IP Security module automatically creates EOH>an internal filter list and orders the filters from most specific to least specific". Так что создаем два правила. Первое — "для всех — шифровать". Второе — "а вот для этой подсети — не шифровать". Ну и вообщем-то все.
Ну, Windows IP security module мне нужен в последнюю очередь, я вообще-то указал ОС в первом сообщении :-)
EOH>Но, ИМХО, для такой сложной задачи я бы все же порекомендовал позвать админа чтобы он все один раз настроил и показал. А потом уже и сами будете :). Это будет проще по деньгам, по времени и не будет шанса где-нибудь поломать безопасность.
В любом случае, я не собираюсь ни на кого сваливать ответственность.
Попробую IPSec. Таблицы маршрутизации трогать не придется, сломать что-нибудь сложно.
Да вообщем-то как обычно. Цитата из какой-то technote: "The Windows IP Security module automatically creates
an internal filter list and orders the filters from most specific to least specific". Так что создаем два правила. Первое — "для всех — шифровать". Второе — "а вот для этой подсети — не шифровать". Ну и вообщем-то все.
Ну, Windows IP security module мне нужен в последнюю очередь, я вообще-то указал ОС в первом сообщении
А какая разница? Линукс — та же винда, только в профиль . В винде нужно галочку искать, в линуксе — "а почему нет гвайдов IPsec без VPN?" . Те же два правила с приоритетом.
Попробую IPSec. Таблицы маршрутизации трогать не придется, сломать что-нибудь сложно.
Удачи. Если накопаете какую-нибудь интересную документацию, которая Вам оказалась полезной — буду благодарен если поделитесь. А то IPSec под линуксом в интернете рассматривается в основном как довесок к VPN, что не есть удобно .