Я хочу подключить несколько локальных сетей, расположенных на удаленных зданиях.
На «центральном» сайте установлен компьютер Linux с OpenVPN. На каждом удаленном сайте также работает OpenVPN.
- центральный сайт имеет локальную сеть с номером 192.168.0.0/24
- несколько удаленных сайтов также пронумерованы 192.168.0.0/24
- Я не могу / не буду / не хочу / что-либо изменить нумерацию локальной сети
- У меня нет контроля над большинством удаленных OpenVPN
Затем мне нужно:
1. определить виртуальные ЛВС
2. настроить 1: 1 NAT для каждого сайта
3. 1: 1 NAT должен быть настроен на центральном маршрутизаторе
,
Таким образом, каждый сайт имеет локальную сеть 10.10.x.0 / 24.
Когда компьютер хочет, скажем, 192.168.0.44 на сайте 12, он просто должен отправить пакет на 10.10.12.44
Использование VPN не проблема для меня. В настоящее время я подключаю более 60 сайтов. Но я не нахожу простой способ сделать это 1: 1 NAT.
Вот пример пакета, отправленного с центрального сайта на удаленный сайт, и его ответного пакета:
Я провел несколько тестов с iptables NETMAP, но мне не удалось заставить его работать, потому что я не нашел способа изменить источник + назначение после решения о маршрутизации.
Я предпочитаю избегать новой функции --client-nat
OpenVPN.
Может быть, я должен заставить маршрутизацию с ip route
? Или дважды зацикливаться на сетевом стеке veth
?
Примечание: я не хочу использовать маскарад. Только 1/1 NAT.
РЕДАКТИРОВАТЬ:
Это невозможно при обычной настройке openVPN. Поскольку пакет с удаленного сайта неотличим от пакета с другого сайта: оба имеют одинаковые адреса отправителя и получателя, и оба имеют одинаковый интерфейс tun (или tap). Так что это не возможно для источника-NAT это.
Решение 1: сделать NAT на удаленных сайтах. В моем случае это невозможно. Я должен сделать это только на центральном сайте.
Решение 2: настроить один VPN для каждого удаленного сайта. Так что у меня будет по одному тюну на каждого. Я думаю, что это может быть хорошо. Не очень эффективная память, но хорошо.
Решение 3: настроить (незашифрованный) туннель внутри VPN для каждого сайта. Это даст один интерфейс для каждого. Простые туннели не являются кроссплатформенными (к моему знанию). Например, GRE или ipip или sit подходят для Linux, но на некоторых удаленных сайтах работает только один компьютер с Windows, поэтому на нем установлен openVPN. Поэтому невозможно настроить простой туннель. Другой вариант - использовать более сложный туннель (что?), Но издержки в системе и на системном администраторе могут быть больше, чем при наличии нескольких VPN
Решение 4: скомпилируйте последнюю версию openVPN, поскольку она включает функцию NAT 1: 1. Я проверяю это на этой неделе.