Я хочу підключити кілька локальних мереж, розташованих на віддалених будинках.
На "центральному" сайті є комп'ютер Linux, на якому працює OpenVPN. На кожному віддаленому сайті також працює OpenVPN.
- центральний сайт має локальну мережу з номером 192.168.0.0/24
- кілька віддалених сайтів також пронумеровані 192.168.0.0/24
- Я не можу / не хочу / не хочу / що-небудь змінювати нумерацію локальної мережі
- У мене немає контролю над більшістю віддалених OpenVPN
Тоді мені потрібно:
1. визначити віртуальну локальну мережу
2. налаштувати NAT 1: 1 для кожного сайту
3. NAT 1: 1 має бути налаштований на центральному маршрутизаторі
.
Отже, на кожному веб-сайті видно локальну мережу 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. Оскільки пакет з віддаленого сайту не відрізняється від пакета з іншого сайту: обидва мають схожі адреси джерела та місця призначення, і обидва походять з одного інтерфейсу настройки туну (або вибору). Отже, джерело NAT це неможливо.
Рішення 1: виконайте NAT на віддалених сайтах. У моєму випадку це неможливо. Я маю це робити лише на центральному сайті.
Рішення 2: встановлення однієї VPN для кожного віддаленого сайту. Тож у мене буде по одному туну для кожного. Я думаю, це може бути нормально. Не дуже ефективна пам'ять, але гаразд.
Рішення 3: встановити (незашифрований) тунель всередині VPN для кожного сайту. Це дасть один інтерфейс для кожного. Прості тунелі не є міжплатформенними (на мій погляд). Наприклад, GRE, ipip або sit є нормальними для Linux, але на деяких віддалених сайтах працює лише один комп'ютер Windows, тому на ньому встановлено openVPN. Так неможливо встановити простий тунель. Іншим варіантом є використання більш складного тунелю (який?), Але накладні витрати в системі та на системному адміністраторі можуть бути більшими, ніж наявність декількох VPN
Рішення 4: компілюйте останню версію openVPN, оскільки вона включає функцію NAT 1: 1. Я тестую це на цьому тижні.