Перенос Локального Сервера В Сеть С Помощью Другого Внешнего Сервера

Добрый день, хабровчане! История такая: сколько себя помню, дома всегда висел какой-то сервер, который нам всем очень хотелось вывести в любимый Интернет. «Так что же тут сложного? Практически любой провайдер за небольшую плату предоставляет статический белый 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

Вместе с данным постом часто просматривают: