Добрый день, хабровчане! История такая: сколько себя помню, дома всегда висел какой-то сервер, который нам всем очень хотелось вывести в любимый Интернет. «Так что же тут сложного? Практически любой провайдер за небольшую плату предоставляет статический белый IP!» – скажете вы и будете абсолютно правы.
Но оно платное, и вообще хотелось попробовать что-то более оригинальное.
Основная проблема с доступом к моему серверу — NAT. Если кто-то не знает, что это такое, ниже я оставил объяснение из Википедии.
НАТ NAT (от англ.
Network Address Translation — «трансляция сетевых адресов») — механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов.
Также называется IP-маскарадом, сетевым маскарадом и трансляцией собственных адресов.
Трансляцию адресов методом NAT может выполнить практически любое устройство маршрутизации — маршрутизатор, сервер доступа, межсетевой экран.
Наиболее популярным является SNAT, суть механизма которого заключается в замене адреса отправителя при прохождении пакета в одном направлении и обратной замене адреса назначения в ответном пакете.
Наряду с адресами источника/назначения также можно заменить номера портов источника и назначения.
При получении пакета от локального компьютера маршрутизатор смотрит IP-адрес назначения.
Если это локальный адрес, то пакет пересылается на другой локальный компьютер.
Если нет, то пакет необходимо отправить наружу, в Интернет. А вот обратный адрес в посылке указывает локальный адрес компьютера, который не будет доступен из Интернета.
Поэтому маршрутизатор «на лету» транслирует (заменяет) обратный IP-адрес пакета на свой внешний (видимый из Интернета) IP-адрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам).
Маршрутизатор сохраняет комбинацию, необходимую для обратной замены, в своей временной таблице.
Через некоторое время после того, как клиент и сервер закончат обмен пакетами, маршрутизатор сотрет в своей таблице запись о n-м порту по истечении срока действия.
Другими словами, это внешний маршрутизатор, который позволяет отправлять запросы в Интернет, но не позволяет их получать.
Вы получаете ответ из Интернета, а это значит, что не все потеряно.
Вспомнил старую программу LogMeIn Hamach, она тоже позволяла обмениваться пакетами данных, несмотря на то, что ВСЕ клиенты находились в закрытой сети NAT. Что, если мы реализуем что-то вроде этого:
Что здесь нарисовано? OPI — мой ПК Orange Pi, выполняющий роль сервера, NAT — это, как нетрудно догадаться, маршрутизатор моего оператора (их может быть и больше, но сути это не меняет), KVM — внешний сервер друга, CLI — клиент. Возможно, у вас возник вопрос: «По какой причине вы не могли просто скинуть все свои сервисы на сервер другаЭ» Ответ прост: не хочу.
В конце концов, дисковое пространство пришлось бы использовать кому-то другому, но меня это не устраивает. Не говоря уже о сложности администрирования и обслуживания серверов.
OPI подключается к KVM и между ними устанавливается VPN-канал.
А потом клиент подключается к KVM, а эта машина в свою очередь отправляет запрос через VPN на OPI. Почему КВМ? Сервер друга — обычный VDS (Виртуальный выделенный сервер).
Обычно это либо KVM (виртуальная машина на основе ядра), либо OVZ (OpenVZ).
OVZ в нашем случае не подходит, так как iptables там работает как-то не так, и вообще штука очень странная.
Настройка сервера
В теории все это звучит здорово, но теперь нам нужно применить это на практике.Вам необходимо выбрать протокол для VPN. Изначально я склонялся к OpenVPN, но после ряда проб, ошибок и неудач пришёл к выводу, что это не лучший протокол для подобных действий.
В конце концов, здесь используются сложные алгоритмы шифрования, что также будет существенно нагружать процессор OPI и внешний сервер, поэтому мой выбор пал на протокол PPTP. Первым шагом является установка на сервер самого демона PPTP:
Следующим шагом будет его настройка.apt install pptpd
Откроем его конфигурационный файл /etc/pptpd.conf и укажем IP-адрес сервера и диапазон IP-адресов клиентов: localip 10.0.0.1
remoteip 10.0.0.100-200
Теперь вам нужно создать учетные записи VPN-клиентов.
Их список находится в файле /etc/ppp/chap-secrets. # client server secret IP addresses
orange pptpd pass123 10.0.0.100
Мы создали оранжевый клиент с паролем pass123 и IP-адресом 10.0.0.100. Если вместо IP-адреса вы укажете * , то клиент получит любой свободный IP-адрес из диапазона, указанного в RemoteIP. Нам явно не нужна случайность.
Теперь еще пара касаний с настройками PPTPD. Добавьте DNS-серверы в файл /etc/ppp/pptpd-options. ms-dns 8.8.8.8
ms-dns 8.8.4.4
И перезагрузите PPTPD: service pptpd restart
Очень важным шагом является включение IP-переадресации.
Это позволит вам пересылать пакеты между общедоступным IP-адресом и частными IP-адресами, которые вы настроили с помощью PPTP. Отредактируйте файл /etc/sysctl.conf и раскомментируйте строку: net.ipv4.ip_forward = 1
Отлично, теперь вы можете начать творить чудеса с ipatables. Для начала узнаем имя нашего сетевого интерфейса: ~$ ifconfig
Теги: #linux #Сетевые технологии #Администрирование серверов #vpn #конфигурация Linux #iptables #nat #Orange Pi #pptp
-
Возможности В Грузии Для Ит-Специалистов
19 Oct, 24 -
Sage: Математика С Открытым Исходным Кодом
19 Oct, 24 -
Опыт Использования Adviser.
19 Oct, 24 -
Сша Ужесточат Наказания Для Хакеров
19 Oct, 24 -
О Том, Как Plesk Посетил Kubecon
19 Oct, 24