N2N - это VPN-приложение уровня 2/3 с открытым исходным кодом. В отличие от многих других программ VPN, N2N может подключать компьютеры, расположенные за NAT-маршрутизатором. Это дает огромное преимущество для подключения к облачной среде без необходимости полагаться на специальные протоколы, такие как протокол ESP (используемый ipsec). Для достижения этого соединения N2N использует суперузел, который может маршрутизировать информацию между узлами NAT. Это VPN-соединение может использоваться для соединения нескольких экземпляров Vultr между регионами.
Предпосылки
- Три экземпляра сервера Ubuntu 16.04 LTS x64. (Любой размер будет работать)
- Пользователь sudo (или root) .
В этом примере мы будем использовать три узла в нескольких зонах:
Установка программного обеспечения
Следующие команды будут выполняться в каждом случае.
Начните с установки build-essential
из репозитория, а также libssl-dev
, как мы будем строить из новейшего исходного кода.
apt-get install -y build-essential libssl-dev
Затем загрузите исходный код с github.
cd /tmp
git clone https://github.com/ntop/n2n.git
Скомпилируйте все двоичные файлы.
cd n2n
make
make install
make install
Команда будет создана supernode
и edge
двоичные файлы в /usr/sbin
каталоге. Готово, очистив файлы.
rm -rf /tmp/n2n
Установка - Узел Париж
Первый узел будет нашим так называемым суперузлом. Это supernode запустит сервис supernode , который будет прослушивать порт UDP 1200
. По умолчанию приложение N2N не создает служебный файл. Таким образом, мы должны будем предоставить свои собственные.
Создайте файл службы 'n2n_supernode':
nano /etc/systemd/system/n2n_supernode.service
Добавьте следующий контент:
[Unit]
Description=n2n supernode
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/supernode -l 1200
[Install]
WantedBy=multi-user.target
Директива -l определяет порт UDP 1200
. Это порт, на котором будет слушать суперузел. Чтобы убедиться, что все работает, запустите службу supernode:
systemctl start n2n_supernode
Проверьте статус супер узла.
systemctl status n2n_supernode
Это покажет статус, подобный следующему.
● n2n_supernode.service - n2n supernode
Loaded: loaded (/etc/systemd/system/n2n_supernode.service; disabled; vendor prese
Active: active (running) since Wed 2018-08-15 17:07:46 UTC; 5s ago
Main PID: 4711 (supernode)
Tasks: 1
Memory: 80.0K
CPU: 1ms
CGroup: /system.slice/n2n_supernode.service
└─4711 /usr/sbin/supernode -l 1200
Далее мы создадим пограничный сервис. Эта пограничная служба будет запрашивать частный IP-адрес для связи между другими границами в других зонах Vultr.
Как и в случае службы суперузлов, для этого также потребуется собственный файл службы.
nano /etc/systemd/system/n2n_edge.service
Добавьте следующий контент:
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target n2n_supernode.service
[Service]
ExecStart=/usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypassword -f
[Install]
WantedBy=multi-user.target
В этом служебном файле мы определили следующие параметры командной строки:
-l localhost:1200
: Это подключится к локальному хосту через порт UDP 1200
.
-c Vultr
: Это сообщество, к которому присоединится край. Все ребра в пределах одного сообщества появляются в одной локальной сети (сегмент сети уровня 2). Края, которые не находятся в одном сообществе, не будут общаться друг с другом.
-a 192.168.1.1
: IP, назначенный этому интерфейсу. Это IP-адрес виртуальной локальной сети N2N.
-k mypassword
: Пароль, используемый для каждого ребра. Все взаимодействующие ребра должны использовать один и тот же ключ и имя сообщества.
-f
: Отключает режим демона и заставляет ребро работать на переднем плане. Это необходимо для служебного файла, иначе systemctl
служба не запустится.
Чтобы убедиться, что все работает, запустите сервис.
systemctl start n2n_edge
Затем запросите статус сервиса.
systemctl status n2n_edge
Вывод будет аналогичен следующему.
● n2n_edge.service - n2n edge
Loaded: loaded (/etc/systemd/system/n2n_edge.service; disabled; vendor preset: en
Active: active (running) since Wed 2018-08-15 17:10:46 UTC; 3s ago
Main PID: 4776 (edge)
Tasks: 1
Memory: 396.0K
CPU: 8ms
CGroup: /system.slice/n2n_edge.service
└─4776 /usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypass
Если мы проверим ifconfig, вы увидите, что edge0
интерфейс использует виртуальный IP-адрес N2N .
ifconfig
Вывод будет аналогичен следующему.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
После этого включите и создайте правила брандмауэра. Обязательно замените текст node_miami_ip
и node_sydney_ip
текст на общедоступный IP-адрес экземпляра в Сиднее и Майами. (Мы будем использовать их позже).
ufw allow 22/tcp
ufw allow from node_miami_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
ufw enable
Последнее, что нужно сделать с этим узлом, - включить обе службы при загрузке.
systemctl enable n2n_supernode.service
systemctl enable n2n_edge.service
Установка - Узел Майами
Узел Майами соединится с суперузлом, который в настоящее время работает в зоне Парижа. Для этого нам нужно только создать служебный файл для edge
приложения.
Начните с создания файла пограничного сервиса.
nano /etc/systemd/system/n2n_edge.service
Добавьте следующий контент.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.2 -k mypassword -f
[Install]
WantedBy=multi-user.target
Примечание . Замените node_paris_ip
публичный IP-адрес экземпляра, запущенного в Париже.
Это позволит подключиться к узлу в Париже через порт UDP 1200
, присоединиться к сообществу ' Vultr
', запросить IP 192.168.1.2
и выполнить аутентификацию с помощью ' mypassword
'.
Далее запустите сервис.
systemctl start n2n_edge
Проверьте состояние на наличие признаков того, что служба запущена правильно и работает.
systemctl status n2n_edge
Затем убедитесь, что edge0
IP-адрес востребован.
ifconfig
Это покажет 192.168.1.2
IP-адрес.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Следующее, что нужно сделать, это включить службу при загрузке.
systemctl enable n2n_edge.service
При желании включите брандмауэр и добавьте правила SSH.
ufw allow 22/tcp
ufw enable
Теперь мы сможем пропинговать оба ребра в наших экземплярах.
В Париже, пинг Vultr экземпляр в Майами
ping 192.168.1.2
В Майами, пинг край в Париже
ping 192.168.1.1
Установка - Узел Сидней
Наконец, мы добавим наш последний континент к соединению: Австралия. Начните заново с создания пограничного сервиса, этот пограничный сервис также подключится к предыдущему настроенному суперузлу в Париже.
nano /etc/systemd/system/n2n_edge.service
Добавьте следующий контент.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.3 -k mypassword -f
[Install]
WantedBy=multi-user.target
Примечание . Замените node_paris_ip
публичный IP-адрес экземпляра, запущенного в Париже.
Это позволит подключиться к узлу в Париже через порт UDP 1200
, присоединиться к сообществу ' Vultr
', запросить IP 192.168.1.3
и выполнить аутентификацию с помощью ' mypassword
'.
systemctl start n2n_edge
Проверьте статус, чтобы убедиться, что служба запущена.
systemctl status n2n_edge
Убедитесь, что edge0
IP-адрес востребован.
edge0 Link encap:Ethernet HWaddr 46:56:b0:e9:8f:8a
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4456:b0ff:fee9:8f8a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Снова включите этот сервис при загрузке.
systemctl enable n2n_edge.service
При желании включите брандмауэр и добавьте правила SSH.
ufw allow 22/tcp
ufw enable
Теперь мы сможем пропинговать каждый экземпляр Vultr с каждого узла.
ping 192.168.1.1
ping 192.168.1.2
ping 192.168.1.3
Если вы хотите проверить соединение между каждым краем узла, включите правила брандмауэра в экземплярах Майами и Парижа. Это позволит общаться между краями.
В Майами добавьте следующие правила. (Обязательно замените текст node_paris_ip
и node_sydney_ip
текст на общедоступные IP-адреса экземпляров в Сиднее и Париже.)
ufw allow from node_paris_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
В Сиднее добавьте следующие правила.
ufw allow from node_paris_ip to any port 1200
ufw allow from node_miami_ip to any port 1200
Теперь вы можете выключить или перезагрузить супер-узел. Сетевые подключения будут продолжать существовать. Только новые границы будут страдать от проблем с подключением, пока служба суперузла не работает.
Вывод
Мы успешно настроили VPN-соединение между несколькими зонами. Это должно предложить довольно много новых возможностей для сценариев высокой доступности для нашей недавно сконфигурированной среды.