Як елегантно вибірково виключити мережевий трафік FreeBSD з інтерфейсу OpenVPN через порт


1

тут недосвідчений сисадмін.

Я планую запустити чистий демон у в'язниці FreeBSD через OpenVPN, але хочу мати змогу SSH безпосередньо в тюрму і використовувати демон веб-інтерфейсу демона, не проходячи через VPN. Як я розумію, тунель OpenVPN зазвичай встановлюється як віртуальний інтерфейс за замовчуванням, і тому вхідний трафік за замовчуванням буде виходити на інтерфейс OpenVPN (що проблематично, оскільки це призводить до затримки).

Я подумав, "добре, очевидно, оскільки весь цей трафік залишається на кількох портах, я просто переспрямую їх на шлюз, який не є VPN". Я намагався шукати рішення, але майже всі вони включають iptables замість ipfw (що за замовчуванням для FreeBSD) та вирішують дещо інші проблеми. А альтернативні рішення, як використання декількох маршрутів за замовчуванням, щоб гарантувати, що вхідний трафік на будь-якому інтерфейсі завжди надсилається на одному інтерфейсі, здається далекосяжним і потребує глибокого знання всіх інструментів, що використовуються.

Чи є елегантний спосіб забезпечити вихід трафіку на конкретні порти у визначеному інтерфейсі, що не використовується за замовчуванням, за допомогою ipfw?

Відповіді:


1

Якщо не використовується щось на зразок Multipath TCP, з'єднання TCP ніколи не змінять свій інтерфейс. Якщо трафік надходить від віддаленого хоста А на інтерфейсі Y, відповіді (як правило) залишатимуться через інтерфейс Y, навіть якщо найкращий маршрут (до хоста A) може призвести в іншому місці. За умови, звичайно, що інтерфейс Y має маршрут, що веде до хоста А.

OpenVPN у своїй найбільш використовуваній redirect-gateway def1конфігурації не перезаписує маршрути. Натомість він використовує, як здійснюється узгодження маршруту. Вибирається найбільш конкретний маршрут узгодження. Як правило, у вас буде 0.0.0.0/0маршрут (він же за замовчуванням), що вказує на ваш Інтернет-шлюз (або будь-який інший). Цей маршрут відповідає всім. Більш конкретні маршрути зазвичай також є, що ведуть до вашої локальної мережі. OpenVPN створює два нові маршрути: 0.0.0.0/1і 128.0.0.0/1. Знову ж таки, ці маршрути відповідають усім, але вибираються за попереднім маршрутом за замовчуванням, оскільки вони більш конкретні. Підсумок: Інтерфейс Y все ще може досягти "всього".

Як правило, VPN-з'єднання не перешкоджає вхідному трафіку на інших інтерфейсах. Таким чином, він повинен працювати без додаткових налаштувань.


Дякую! Мені все-таки цікаво (хоча я візьму те, що ви говорите за номінал): чи я можу прочитати якусь документацію, яка б сказала мені, що TCP-з'єднання пов'язані з інтерфейсами? Я трохи погуглив відповідну документацію, але все ще не впевнений, як міг би сам передбачити це.
Полігоніка

Це за визначенням: кінцева точка TCP визначається IP-адресою та портом TCP. Кінцеві точки TCP у з'єднанні є фіксованими, оскільки з'єднання визначається двома кінцевими точками. У всіх, крім спеціальних конфігурацій, кожен IP-інтерфейс на машині має унікальну IP-адресу. Тому, якщо не встановити нове з'єднання, все виправлено.
Даніель Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.