Кратко: Возьмите облачную виртуальную машину с публичным IP, запустите на ней WireGuard сервер, подключитесь к нему с Mikrotik роутера, пробросьте все порты с ВМ на Mikrotik через туннель WireGuard.
Дополнительные заметки: Провайдер Linode предлагает самый дешевый инстанс за 5$/месяц с 4 ТБ исходящего трафика в месяц. Входящий трафик не считается (бесплатно). ip/cloud с назначенным DDNS больше не работает. Рекомендуется использовать свой собственный домен или бесплатный DDNS, например duckdns.org. При использовании описанного метода нельзя будет использовать порты 22/tcp и 51820/udp (но их можно изменить).
Сценарий использования: Ваш провайдер (то есть любой, кто пользуется мобильным интернетом) не даёт публичный IP, и поэтому ничего нельзя хостить в домашней сети. В моём случае у меня был Homeassistant сервер дома, и я хотел, чтобы телефон отправлял туда своё местоположение, но без прямого подключения это было невозможно.
Решение – мне нужно прямое подключение из интернета к роутеру, который пробрасывает порты на мой сервер.
Инструкция: Зайдите на linode.com и закажите самый дешевый инстанс (shared CPU, 1 ядро, 1 ГБ RAM, 5$/месяц) с последним Rocky Linux. На момент написания я использовал Rocky Linux 8.
Подключитесь к инстансу по SSH под root и выполните следующие команды, просто скопировав их в терминал:
# Обновляем систему
dnf update -y --refresh
# Устанавливаем дополнительные репозитории
dnf install -y elrepo-release epel-release
# Устанавливаем инструменты wireguard
dnf install -y kmod-wireguard wireguard-tools
# Отключаем firewalld
systemctl disable --now firewalld.service
# Включаем IP форвардинг
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -a | grep all.forwarding > /etc/sysctl.conf
# Генерируем ключи wireguard
cd /etc/wireguard && wg genkey | (umask 0077 && tee server.key) | wg pubkey > server.pub
cd /etc/wireguard && wg genkey | (umask 0077 && tee client.key) | wg pubkey > client.pub
# Создаем конфиг сервера wireguard /etc/wireguard/wg0.conf
cat <<EOT > /etc/wireguard/wg0.conf
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = $(</etc/wireguard/server.key)
PostUp = iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT; iptables -t nat -A PREROUTING -p udp --dport 51820 -j ACCEPT; iptables -t nat -A PREROUTING -j DNAT --to-destination 10.200.200.2; iptables -t nat -A POSTROUTING -j MASQUERADE
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 22 -j ACCEPT; iptables -t nat -D PREROUTING -p udp --dport 51820 -j ACCEPT; iptables -t nat -D PREROUTING -j DNAT --to-destination 10.200.200.2; iptables -t nat -D POSTROUTING -j MASQUERADE
# Mikrotik router
[Peer]
PublicKey = $(</etc/wireguard/client.pub)
AllowedIPs = 10.200.200.2/32
EOT
# Создаем список команд для Mikrotik, выполнив следующую команду:
cat <<EOT > /etc/wireguard/mikrotik_commands.txt
# Создаем интерфейс wireguard
/interface wireguard add listen-port=13235 mtu=1420 name=wg99 private-key="$(</etc/wireguard/client.key)"
# Подключаемся к wireguard серверу
/interface wireguard peers add allowed-address=10.200.200.0/24 endpoint-address=$(curl -sL endpoint-port=51820 interface=wg99 persistent-keepalive=25s public-key="$(</etc/wireguard/server.pub)"
# Назначаем IP интерфейсу wireguard
/ip address add address=10.200.200.2/24 interface=wg99 network=10.200.200.0
# Исключаем такой трафик из fasttrack/разрешаем в firewall
/ip firewall filter add action=accept chain=forward in-interface=wg99 place-before=[find where action=fasttrack-connection]
/ip firewall filter add action=accept chain=forward out-interface=wg99 place-before=[find where action=fasttrack-connection]
EOT
# Включаем wireguard сервер при загрузке
systemctl enable wg-quick@wg0.service
# Перезагружаем систему
reboot
Как видите, последняя команда перезагрузит инстанс. Подключитесь к нему снова и выведите содержимое файла /etc/wireguard/mikrotik_commands.txt:
cat /etc/wireguard/mikrotik_commands.txt
В этом файле находятся все сгенерированные команды, которые нужно скопировать и сразу вставить в терминал Mikrotik и выполнить. После этого у вас должно быть подключение с публичного IP инстанса Linode. Попробуйте пробросить порт в роутере Mikrotik и проверить порт на IP инстанса Linode – он должен возвращать то, что настроено на вашем роутере. Учтите, что трафик идет через интерфейс wg99 с IP 10.200.200.1, так что возможно придется подкорректировать правила проброса портов.
Дополнительные заметки: Провайдер Linode предлагает самый дешевый инстанс за 5$/месяц с 4 ТБ исходящего трафика в месяц. Входящий трафик не считается (бесплатно). ip/cloud с назначенным DDNS больше не работает. Рекомендуется использовать свой собственный домен или бесплатный DDNS, например duckdns.org. При использовании описанного метода нельзя будет использовать порты 22/tcp и 51820/udp (но их можно изменить).
Сценарий использования: Ваш провайдер (то есть любой, кто пользуется мобильным интернетом) не даёт публичный IP, и поэтому ничего нельзя хостить в домашней сети. В моём случае у меня был Homeassistant сервер дома, и я хотел, чтобы телефон отправлял туда своё местоположение, но без прямого подключения это было невозможно.
Решение – мне нужно прямое подключение из интернета к роутеру, который пробрасывает порты на мой сервер.
Инструкция: Зайдите на linode.com и закажите самый дешевый инстанс (shared CPU, 1 ядро, 1 ГБ RAM, 5$/месяц) с последним Rocky Linux. На момент написания я использовал Rocky Linux 8.
Подключитесь к инстансу по SSH под root и выполните следующие команды, просто скопировав их в терминал:
# Обновляем систему
dnf update -y --refresh
# Устанавливаем дополнительные репозитории
dnf install -y elrepo-release epel-release
# Устанавливаем инструменты wireguard
dnf install -y kmod-wireguard wireguard-tools
# Отключаем firewalld
systemctl disable --now firewalld.service
# Включаем IP форвардинг
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -a | grep all.forwarding > /etc/sysctl.conf
# Генерируем ключи wireguard
cd /etc/wireguard && wg genkey | (umask 0077 && tee server.key) | wg pubkey > server.pub
cd /etc/wireguard && wg genkey | (umask 0077 && tee client.key) | wg pubkey > client.pub
# Создаем конфиг сервера wireguard /etc/wireguard/wg0.conf
cat <<EOT > /etc/wireguard/wg0.conf
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = $(</etc/wireguard/server.key)
PostUp = iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT; iptables -t nat -A PREROUTING -p udp --dport 51820 -j ACCEPT; iptables -t nat -A PREROUTING -j DNAT --to-destination 10.200.200.2; iptables -t nat -A POSTROUTING -j MASQUERADE
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 22 -j ACCEPT; iptables -t nat -D PREROUTING -p udp --dport 51820 -j ACCEPT; iptables -t nat -D PREROUTING -j DNAT --to-destination 10.200.200.2; iptables -t nat -D POSTROUTING -j MASQUERADE
# Mikrotik router
[Peer]
PublicKey = $(</etc/wireguard/client.pub)
AllowedIPs = 10.200.200.2/32
EOT
# Создаем список команд для Mikrotik, выполнив следующую команду:
cat <<EOT > /etc/wireguard/mikrotik_commands.txt
# Создаем интерфейс wireguard
/interface wireguard add listen-port=13235 mtu=1420 name=wg99 private-key="$(</etc/wireguard/client.key)"
# Подключаемся к wireguard серверу
/interface wireguard peers add allowed-address=10.200.200.0/24 endpoint-address=$(curl -sL endpoint-port=51820 interface=wg99 persistent-keepalive=25s public-key="$(</etc/wireguard/server.pub)"
# Назначаем IP интерфейсу wireguard
/ip address add address=10.200.200.2/24 interface=wg99 network=10.200.200.0
# Исключаем такой трафик из fasttrack/разрешаем в firewall
/ip firewall filter add action=accept chain=forward in-interface=wg99 place-before=[find where action=fasttrack-connection]
/ip firewall filter add action=accept chain=forward out-interface=wg99 place-before=[find where action=fasttrack-connection]
EOT
# Включаем wireguard сервер при загрузке
systemctl enable wg-quick@wg0.service
# Перезагружаем систему
reboot
Как видите, последняя команда перезагрузит инстанс. Подключитесь к нему снова и выведите содержимое файла /etc/wireguard/mikrotik_commands.txt:
cat /etc/wireguard/mikrotik_commands.txt
В этом файле находятся все сгенерированные команды, которые нужно скопировать и сразу вставить в терминал Mikrotik и выполнить. После этого у вас должно быть подключение с публичного IP инстанса Linode. Попробуйте пробросить порт в роутере Mikrotik и проверить порт на IP инстанса Linode – он должен возвращать то, что настроено на вашем роутере. Учтите, что трафик идет через интерфейс wg99 с IP 10.200.200.1, так что возможно придется подкорректировать правила проброса портов.
