Переслати порт клієнту VPN?


21

Я натрапив на головоломку і не мав великого шансу знайти рішення. Зараз я (на жаль) підключений до мережі через Verizon 3G. Вони фільтрують весь вхідний трафік, тому мені неможливо відкрити порти, щоб прийняти з'єднання.

Наразі у мене на сайті linode.com є віртуальна машина Linux, і думка перехрестилася, щоб встановити pptpdта спробувати зробити деяку iptablesпереадресацію портів. Я pptpdвстановив, і моя домашня машина радісно підключається. Однак, ось загальна інформація:

IP-адреса сервера (Debian) WAN IP: xxxx on eth0 - pptpd IP: yyy1 on ppp0 - VPN клієнта IP: yyy100

Щоб переконатися, що я не божевільний, я спробував кілька підключень від сервера до відкритих портів клієнта, і клієнт приймає з'єднання через VPN IP.

Я хочу досягти цього:

Інтернет -> WAN IP: Порт -> Переслати клієнту VPN IP: Порт

Так, наприклад, якби у мене був відкритий порт 6000 на моєму клієнті, людина могла би ввести телефон в мережу xxxx: 6000, і сервер би це схопив і переправив на 192.168.3.100:6000.

Я спробував щонайменше 20 різних конфігурацій iptablesGooglegled, і жоден ще не працював. Хтось має ідеї чи, можливо, навіть зовсім інший підхід, про який я, можливо, не знаю? Мета полягає в тому, щоб прослуховувати жахливо підключене з'єднання, бажано як TCP, так і UDP-трафік.

Відповіді:


25

Для цього потрібно виконати три речі на сервері VPN (Linode):

  1. Ви повинні ввімкнути переадресацію IP:

    sysctl -w net.ipv4.ip_forward=1
    
  2. Встановіть NAT (DNAT) для переадресації порту. Ви, напевно, вже зрозуміли це, тому що це стандартні речі для пересилання портів, але для повноти:

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. Налаштуйте джерело NAT (SNAT) таким чином, щоб з точки зору вашого клієнта VPN з'єднання виходило з VPN-сервера:

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

Причина, що вам потрібна SNAT, полягає в тому, що в іншому випадку ваш VPN-клієнт відправить свої повернення пакетів прямо на хост, який ініціював з'єднання (zzzz) через шлюз за замовчуванням (тобто Verizon 3G), а не через VPN. Таким чином, IP-адреса джерела у повернених пакетах буде вашою Verizon 3G адресою, а не xxxx Це спричиняє всілякі проблеми, оскільки zzzz дійсно ініціював підключення до xxxx

У більшості налаштувань переадресації портів SNAT не потрібен, оскільки хост, який виконує переадресацію порту, також є шлюзом за замовчуванням для хостового пункту призначення (наприклад, домашнього маршрутизатора).

Також зауважте, що якщо ви хочете переслати порт 6000 на інший порт (скажімо, 7000), то правило SNAT повинно відповідати 7000, а не 6000.


Привіт AGWA, Дякую за відповідь. Я вже мав ip_forwarding, і ваші правила справно працювали, хоча і не спочатку. Проблема полягала в тому, що я не усвідомлював, що iptables -F не ​​змив записи nat, а iptables -L не перелічив їх. Вигадавши, як правильно їх перелічити, я помітив кілька суперечливих записів із спроб раніше. Після промивання та спробування ваших правил він працює чудово. Хоча одне швидке запитання, у своїх правилах ви вказуєте tcp. Чи змінить цю функцію на "все" для обох трафіків TCP / UDP?
Vile Brigandier

Ласкаво просимо! (До речі, мені подобається використовувати iptables-saveсвої правила iptables - хоча вихід не призначений для споживання людиною, він все ще читається і показує всі ваші правила iptables.) Ні, на жаль, ви не можете використовувати там "усіх", тому що --dportтільки працює з протоколами, які фактично мають порти ("all" включатиме, наприклад, ICMP, що не має поняття про порти). Вам знадобляться окремі правила для TCP та UDP.
AGWA

Дякуємо за пораду iptables-save. Все працює так, як очікувалося і для TCP, і для UDP. Ура.
Vile Brigandier

2
Просто оновлення цієї відповіді полягає в тому, що за допомогою iproute2 ви можете фактично налаштувати клієнта VPN так, щоб він мав 2 шлюзи і маршрутизував DNAT-трафік назад через VPN. Це вигідно, якщо ви не хочете використовувати SNAT і якщо весь трафік, як видається, надходить з сервера vpn. thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System включає інформацію про те, як це налаштувати.
PressingOnAlways

Працює для мене до тих пір, поки ufw вимкнено, навіть якщо я дозволив 8080 в ufw, але як тільки я вмикаю ufw, цей матеріал для переадресації не працює .. будь-яка ідея?
Sudhir N

3

У мене також була ця проблема і годинами намагалася її вирішити .. Ось моє рішення:

  • У мене було більше одного VPNClientз тим самим IPAddress. Тому я дав кожному з них статикуIPAddress

Визначте каталог, де слід зберігати клієнтські скрипти, наприклад / etc / openvpn / staticclients та створіть каталог

mkdir /etc/openvpn/staticclients

Додайте цей каталог як опцію у свій файл налаштування openvpn на сервері:

client-config-dir /etc/openvpn/staticclients

Для кожного клієнта потрібно створити файл. Ім'я файлу повинно відповідати common nameатрибуту, який був вказаний у сертифікаті клієнта. Ця команда отримує CN від сертифікату на комп’ютери:

Цей приклад підштовхує IPAddress10.1.134.110/10.1.134.109 до Клієнта з common name TESTCLIENT, а також підштовхує додатковий маршрут для підмережі 10.1.135.0.

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
  • http://www.yougetsignal.com/tools/open-ports/ та http://canyouseeme.org/ неправильно виявили порти. Мені довелося додатково запустити свою заявку на клієнті, щоб веб-сайти могли бачити ці порти.

  • Не потрібно додаткових SNATправил. Потрібні були лише такі правила:

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110

2

У більшості серверів вимкнено переадресацію ip у конфігурації за замовчуванням. Це потрібно ввімкнути, якщо ви хочете перенаправляти вхідні з'єднання через свою VPN.

Спробуйте це:

sysctl -w net.ipv4.ip_forward = 1

Я маю на увазі, крім конфігурації iptables.


0

Те, що ви хочете досягти, - це, мабуть, дуже можливо за допомогою pptpdOpenVPN та iptables, однак, ви можете знайти кращого кандидата для цього випадку використання. Я щойно прочитав це, де описано, як налаштувати tinc саме для цього випадку використання. Це (потенційно простіша) альтернатива частині pptdpабо OpenVPN. Тоді вам знадобляться точно такі ж правила для iptables.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.