По сути, моя цель - получить 100% портативный и независимый сервер. Я строю его с помощью Raspberry Pi, питаемого от солнечных панелей и батарей, и он должен быть подключен к Интернету с помощью точки доступа 4g. У него должно быть всего 2 функции: служба SSH и служба VPN.
Вот моя проблема.
Сначала я начал этот проект, думая, что моей самой большой проблемой будет IP-роуминг. Я установил себе домен Dynamic DNS и написал cron, который обновлял его каждые 60 секунд. Затем я перенаправил свою точку доступа на Pi (точка доступа - это в основном маршрутизатор, а у Pi есть ключ Wi-Fi).
Однако мне не удалось подключиться к маршрутизатору точки доступа, используя его общедоступный IP-адрес. Именно тогда я понял, что все устройства 4G LTE получают IP-адреса в подсети в гораздо больший NAT. Очевидно, это новая практика с 4G. Устройства 3G используются для получения общедоступного IP-адреса.
В основном мне нужен способ связаться с VPN-сервером, у которого нет уникального IP-адреса.
Может ли VPN-сервер устанавливать соединения с клиентами, вроде обратного туннеля SSH?
Например, он может либо непрерывно опрашивать набор IP-адресов (или динамический домен DNS), пока один из них не примет соединение, либо, возможно, опрашивать другой сервер, который будет содержать список IP-адресов, которые в настоящее время «хотят» подключения (и эти IP-адреса будут по существу опросите этот сервер, чтобы запросить VPN-соединение).
Я знаю, что он отсталый и ломает модель клиент-сервер, но я здесь в отчаянии. Является ли это возможным?
Как видите, подключиться к системе не так-то просто. Суть вашей проблемы заключается в том, что даже вы можете выполнить регистрацию DNS (что дает возможность серверам находить друг друга), фактическое IP-соединение между вашими машинами становится невозможным.
У вашей проблемы есть несколько решений.
Самым простым было то, что у вас был какой-то центральный сервер (с общедоступным фиксированным IP-адресом) и на нем работал VPN-сервер. На вашем rasperry pi, как и на других ваших клиентах, работал только клиент VPN. Этот сервер работал как промежуточный шлюз между вашими rasperry и другими устройствами.
Raspberry -> Central GW machine <- Your any other system
Это решило как проблему регистрации DNS, так и проблему IP-контакта.
С точки зрения сети, никто не подключался к вашему rasperry. Только твоя малина подключена вне к вашему центральному GW.
OpenVPN - прекрасное решение для этого.
Есть и более хитрые решения. Например, вы могли бы как-нибудь сказать своему рэперу: подключиться вне своим клиентам и сделайте над этим vpn. Но это не сработало, если ваши клиенты также находились за NAT, что в настоящее время довольно распространено, особенно в мобильных сетях.
Или вы могли бы использовать тор а также найти промежуточные серверы позади вас. Да, тор на самом деле это не инструмент для взлома, его также можно использовать для обычных задач. Но это не совсем надежно и довольно медленно.
У меня также возникли некоторые проблемы с подключением к Raspberry Pi при подключении к открытой точке доступа (в моем случае это был Optimum WiFi) (SSH в мой Raspberry Pi 2 @ Optimum WiFi - Raspberry Pi Stack Exchange).
Итак, я хотел бы поделиться своим способом попасть в мою Raspberry Pi 2
используя этот обратный туннель ssh:
pi@raspberrypi ~ $ crontab -l | tail -1
@hourly ssh -S alexus -O check XXX > /dev/null 2>&1 ; if [ $? != 0 ] ; then ssh -M -S alexus -fN -R2222:localhost:22 -p 443 XXX ; fi
pi@raspberrypi ~ $
для этого решения требуется еще один запущенный хост, через который вы можете подключиться к вашей raspberry по ssh. даже если это решение не сработает для вас, оно может сработать и для других)
В ближайшем будущем я также планирую изучить вариант openvpn.
Вот пара техник, которые я часто использовал для подобных задач.
вы можете использовать сервер перехода для пересылки трафика между вашим малиновым PI и вами (вашим ssh-клиентом), однако вам как-то удастся подключить (используя обратный ssh) вашу малину к серверу перехода. Этого можно достичь с помощью заданий cron или с помощью обмена сообщениями PubSub (Amazon IoT, PubNub и т. Д.), Чтобы отправить сообщение в raspberry для подключения к промежуточному серверу. Однако вы должны правильно управлять подключением, чтобы не оставлять дыр для атак.
Вы можете использовать одного из бесплатных провайдеров туннелирования, например https://tunnelin.com или https://www.dataplicity.com/ или другой.
По моему опыту, Tunnel In обеспечивает истинное туннелирование и может оборачивать все виды TCP-трафика (SSH, VNC, HTTP и т. Д.) В свои туннели. Он даже предоставляет облачный брандмауэр для управления тем, кто и когда может использовать туннель. В то время как Dataplicity использует сокеты для передачи данных, что ограничивает его поддержкой аутентификации на основе ключей для ssh или поддержки других протоколов.
Никита, у тебя есть пара вариантов. Я настроил RP таким образом на выделенное питание, но только с картой Mifi на плате.
Самое простое решение - связаться с вашим интернет-провайдером и запросить публичный или статический IP-адрес NAT. Большинство провайдеров беспроводной связи сделают это, но они могут взимать с вас плату. Verizon взимает плату в размере 500 долларов за учетную запись, но затем вы можете настроить столько общедоступных IP-адресов на устройствах в своей учетной записи, сколько захотите. Я не знаю, будут ли брать и сколько будут взимать другие поставщики услуг.
Другой вариант - настроить VPN для бедняков с обратным SSH. Это позволяет Pi создать соединение с сервером, где вы можете пересечь SSH-соединение обратно на устройство. См. Эту статью для инструкций http://www.thegeekstuff.com/2013/11/reverse-ssh-tunnel/
Есть много клиентов удаленного администрирования, которые будут работать, просто имейте в виду, что без общедоступного IP-адреса, а не частного IP-адреса с NAT, вам придется заставить Pi установить соединение. К счастью, именно так работает большинство клиентов в домашних сетях, поэтому существует множество решений.