Часто виявляється необхідним дати доступ з Інтернету до будь-яких портів свого комп'ютера, розташованого за NAT провайдера. Але популярний раніше сервіс ngrok став IMHO фактично непридатний в безкоштовній версії. Як же бути? Зробимо свій ngrok, розмістивши його на своїй же VPS-ке (так, Ваш сервер в Інтернеті необхідний, без нього ніяк). Опишу, як це вийшло у мене.
Отже, маємо VPS на Ubuntu Linux 14.04.1. Заходимо в консоль через SSH і діємо за списком.
1. Ставимо останні оновлення для системи.
2. Встановимо необхідні пакети.
система mercurial потрібно для збірки ngrok
3. Встановлюємо останню (1.8.3) версію мови Go (Golang) - ngrok написаний саме на ньому.
apt-get golang - так робити не потрібно, тому що не гарантується установка останньої версії мови
Примітка. Команди export вплинуть тільки на поточну сесію.
4. клонуємо вихідний код ngrok.
6. Генеруємо самоподпісанний SSL-сертифікат (необхідний, так як ngrok створює тунель через TLS).
5000 - термін дії сертифіката в днях (можна замінити, наприклад, на 10000)
domain.com - домен Вашої VPS
Копіюємо потрібні для компіляції файли в директорію assets:
7. Компілюємо сервер і клієнт для Linux.
Копіюємо отриманий файл сервера ngrokd з директорії bin в потрібну папку.
8. Компілюємо сервер (на всякий випадок)) і клієнт для 32-розрядної Windows.
(Для 64-бітової версії міняємо 386 на amd64).
Копіюємо файл клієнта ngrok.exe з VPS з папки bin / windows_386 на клієнтський (домашній) комп'ютер.
9. Копіюємо файли device.key, device.crt, device.csr в директорію, куди ми скопіювали здійсненний файл сервера ngrokd.
Встановлюємо необхідні атрибути файлу сервера:
Запускаємо сервер (наприклад, через утиліту screen).
domain.com - домен Вашої VPS
8080 - порт для HTTP-запитів
8081 - порт для HTTPS-запитів
(Порти, природно, повинні бути вільні)
Тиснемо CTRL + A + D для виходу з створеного «екрану».
10. Створюємо на клієнті (домашньому комп'ютері) файл конфігурації ngrok.cfg в тій же директорії, куди ми скопіювали ngrok.exe, з вмістом:
4443 - порт за замовчуванням, на якому сервер ngrok слухає запити (цей порт повинен бути відкритий на Вашій VPS)
domain.com - домен Вашої VPS
false - адже сертифікат самоподпісанний
domain.com - домен Вашої VPS
12. Запускаємо найпростіший Web-сервер на 80-му порту (HTTP) Вашого домашнього комп'ютера (наприклад, на Ruby c WEBRick).
13. Запускаємо на домашньому комп'ютері клієнт ngrok з висновком протоколу.
1 - бажаний субдомен для цього домашнього комп'ютера
80 - порт нашого Web-сервера, що виставляється в Інтернет
8080 - заданий на кроці 9 порт для HTTP-запитів
domain.com - домен Вашої VPS
Якщо Web-сервер не буде запущений, отримаємо повідомлення:
Ось такі справи! Сподіваюся, комусь стане в нагоді.