LINUX.ORG.RU
решено ФорумAdmin

WireGuard VPN, как организовать входящее соединения для клиента?

 ,


1

1

OS Debian_11. Установил WireGuard VPN на Сервер клиента за НАТ и на арендованый ВПС с белым ЙП. Локальные адреса клиента(10.0.0.2) и VPS (10.0.0.1).

Программа которая работает на сервере клиента пишет, что не получает входящие соединения из интернета на порт 18080 и пишет (no incoming connection). Исходящие сообщения все проходят через VPS нормально.

Как мне добиться прохождения входящих соединений из интернета, через VPS, на сервер клиента на порт 18080?

Ничего не понятно. Что за клиент подключается к VPS. По какому протоколу?

А так, делай DNAT (проброс порта), а заодно и SNAT с VPS на сервер клиента.

Но пока ты не напишешь что кто, куда подключается. Ответ выше это пальцем в небо.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

клиент -это комп за нат VPS -с белым ЙП. Поставил WireGuard VPN и они оба получились в локальной сети с выходом в интернет через VPS с белым ЙП.

Проблема в том, что до программы которая работает на компе клиента не доходят входящие соединения из интернета и она пишет (no incoming connection)

Теперь понятно ?

magnoliya
() автор топика
Ответ на: комментарий от kostik87

какая конкретная команда должна быть что бы направить интернет траффик (то что формируется на ВПС, интерфейс по умолчанию eth0) на комп клиента на порт 18080 ? Клиент находится с ВПС в локальной сети с ЙП 10.0.0.2

magnoliya
() автор топика
Ответ на: комментарий от magnoliya

Ты пишешь про трёх участников сети.

Сервер, VPS и ещё есть кто-то кто подключается на порт 18080 на интерфейс VPS. Сервер и VPS соединены wireguard туннелем.

Ещё раз, опиши схему, а лучше нарисуй.

Если сервер выходит в Интернет через отдельный канал, а маршрут по умолчанию не проходит через wireguard туннель, то тебе нужно на VPS делать DNAT и SNAT.

Если wireguard туннель является маршрутом по умолчанию для сервера подключенного посредством wireguard до VPS, то достаточно сделать только DNAT.

DNAT

iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 18080 -j DNAT --to-destination 1.0.0.2:18080

SNAT

iptables -t nat -I POSTROUTING -o WG0 -p tcp --dport 18080 -d 10.0.0.2/32 -j SNAT --to-source 1.0.0.1

WG0 - интерфейс wireguard на VPS.

Если протокол передачи данные не TCP, а UDP создай правило с ‘-p udp’.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

я пишу про 2-х участников сети. Сервер(за НАТ) и ВПС(с белым ЙП). Они соединены в локальную сеть при помощи WireGuard через интерфейс wg0 который создает WireGuard на обеих компьютерах и имеют локальные адреса Клиент(10.0.0.2) ВПС(10.0.0.1). Весь траффик клиента идет через WireGuard через интерфейс wg0 на ВПС. У ВПС есть еще интерфейс, по умолчанию eth0 , через который и происходит выход в интернет и который имеет белый ЙП. На сервере за нат(клиент) запущена программа получающая в ответ….

No incoming connections - check firewalls/routers allow port 18080

Все соединения сервера за НАТ идут через WireGuard, вот конфиг клиента….

[Interface] Address = 10.0.0.2/32 PrivateKey = MY_PRIVATE_KEY DNS = 1.1.1.1

[Peer] PublicKey = iQFHSxCoxL8h/J72f9b5OXdQiGj12diTPo9oUb4UkAI= AllowedIPs = 0.0.0.0/0 Endpoint = PUBLIC_IP:51820 PersistentKeepalive = 20

Конфиг WireGuard на ВПС…

[Interface] Address = 10.0.0.1/32 SaveConfig = true ListenPort = 51820 PrivateKey = PRIVATE_KEY

[Peer] PublicKey = IYQV2KFHT9T4kPFDKjBTxJ1z+7/ZMmRd4fUo99pu+FA= AllowedIPs = 10.0.0.2/32

magnoliya
() автор топика
Ответ на: комментарий от magnoliya

Очевидно, у тебя приложение\протокол, ничего не знающее о нат, которое ожидет внешнего соединения на 10.0.0.2:18080, что некорректно. Тебе надо:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 18080 -j DNAT --to-destination 10.0.0.2:18080

Проще сказать что это? Что-то вроде ftp?

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Ещё snat нужен. Если схема работы, что с внешнего мира кто-то стучится на порт 18080 на внешнем интерфейсе vps, то просто dnat мало. В этом случае адрес отправителя (тот кто стучится) останется прежним и в случае если wireguard туннель не является маршрутом по умолчанию для системы на которую делается dnat, то ответный пакет пойдет во внешний мир, а не на VPS.

Автор темы не хочет раскрывать карты, что за сервер, откуда идут клиенты до сервера. Можно только гадать.

И не понимает, что в любом случае участника три: сервер с его программой, vps и клиент, которого нужно перенаправить на сервер. Если только клиентом не является его vps.

Правило snat я ему так же выше написал. Но в этом случае он не будет различать клиентов. Чтобы этого избежать нужно настроить policy based routing.

К тому же он так и не ответил использовал ли он правила, что я ему написал или нет. Так же не ответил по какому протоколу идёт обмен пакетами, TCP или UDP.

Автор темы, смотри tcpdump как ходят пакеты:

tcpdump -ni any port 18080

На VPS и на твоей системе с программой, на которую нужно перенаправлять пакеты.

Внимательно прочитай это сообщение и дай пояснения на все здесь написанное.

А так же дай ответ, команды использовал или нет?

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

SNAT по-умолчанию, да и у ТС он работет, написано же. Просто он не соображает, что просто SNAT недостаточно, если для общения используется больше одного сокета, т.е. незвисимые соединения, как с фтп, потому и спросил. Ждем информацию от ТС.

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

SNAT по-умолчанию, да и у ТС он работет, написано же

Ой, ты слишком много делаешь допущений.

Я вот из этого:

Установил WireGuard VPN на Сервер клиента за НАТ и на арендованый ВПС с белым ЙП.

Делаю вывод, что сервер клиента, т.е. сервер где работает программа, которая слушает порт 18080 и на которую нужно делать перенапрвление порта, что у этого сервера нет прямого выхода в интернет. И он находится за роутером ( шлюзом) и выход в интернет получает посредством SNAT на шлюзе в сети клиента.

Непонятно что значит «сервер клиента». Сервер где запущена некоторая программа клиент, которая подключается к другому серверу? Сервер заказчика работ по настройке функционала? Как хочешь так и трактуй.

Т.е. схема такая:

Сервер программы <-> шлюз <-> интернет <-> vps <-> клиенты в интернет.

Между сервером программы и VPS поднят туннель wiregiard.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от kostik87

Не-не, сам прикинь, если бы vpn не работал, ТС не задал бы вопроса из ОП. Очевидно, у него какой-то активный протокол\софт\api\хз что, пытающееся пробиться в ответ на запрос, но VPS ничего об этом не знает.

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от Anoxemian

А я и не говорю, что VPS не работает, надеюсь он поднял wiregiard туннель и проверил, что vps и его сервер пингуются по ip адресам wireguard туннеля.

Не понятно даже какой интерфейс слушает его программа, все, т.е. 0.0.0.0:18080 или она вообще может слушать 127.0.0.1:18080 или локальный интерфейс его сервера.

На чем запущена его программа тоже не понятно, может там Windows, в которой включен брандмауэр. Или linux с политикой drop на цепочке input.

Ждём ответы.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Не понятно даже его программ какой интерфейс слушает его программа, все, т.е. 0.0.0.0:18080 или она вообще может слушать 127.0.0.1:18080

Это неважно, у него 0/0 смотрит в wg. Т.е. проблема в ожидании входящего трафика на 0/0:18080, а это не будет работать без явного указания VPS что с этим делать.

Anoxemian ★★★★★
()
Ответ на: комментарий от kostik87

Секретов тут нет никаких.) сервер за НАТ это мой комп на который я установил monerod (проект Monero) . Я хочу сделать его публичным, что бы к нему мог подключиться кто угодно из интернета. Он ждет на порту 18080 и пишет что

No incoming connections - check firewalls/routers allow port 18080

magnoliya
() автор топика
Ответ на: комментарий от magnoliya

Секретов тут нет никаких.) сервер за НАТ это мой комп на который я установил monerod (проект Monero) .

Ну вот и разгадка. Выполни команду из моего поста на VPS и все заработает.

UPD. Я правда не в курсе какой там протокол, если что, поправь на udp

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от kostik87

OS Debian_11, политики drop нет программа слушает несколько интерфейсов….

LISTEN 0 4096 0.0.0.0:18080 0.0.0.0:* users:((«monerod»,pid=1533,fd=10))

LISTEN 0 4096 0.0.0.0:18081 0.0.0.0:* users:((«monerod»,pid=1533,fd=14))

LISTEN 0 100 127.0.0.1:18082 0.0.0.0:* users:((«monerod»,pid=1533,fd=21))

LISTEN 0 100 0.0.0.0:18083 0.0.0.0:* users:((«monerod»,pid=1533,fd=24))

magnoliya
() автор топика
Ответ на: комментарий от Anoxemian

Не заработает, на vps помимо dnat нужно сделать и snat, посмотри мой комментарий с двумя командами для iptables.

А почему так, прочти мой первый или второй комментарий тебе.

Если ты сделаешь только dnat на vps, то в адресе источника (отправителя) пакетов, что приходят из внешнего мира на vps останется ip адрес внешнего клиента. И ответный пакет от программы пойдет не через wireguard туннель, т.е. не попадет на vps, а пойдет через шлюз за которым находится сервер и клиент, который подключался к vps его отбросит.

kostik87 ★★★★★
()
Ответ на: комментарий от Anoxemian

С одним правилом dnat на vps заработает только если при подключении к witeguard на сервере в качестве маршрута по умолчанию выставляется адрес vps в wireguard туннеле.

kostik87 ★★★★★
()
Ответ на: комментарий от Anoxemian

Ну а кто тебе сказал, что он snat сделал по умолчанию на vps?

Я вижу схему так:

Сервер программы <-> шлюз <-> интернет <-> vps <-> клиенты в интернет.

И snat или маскарадинг у него сделан на шлюзе.

Я об этом уже писал тебе.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

tcp 0 0 0.0.0.0:18080 0.0.0.0:* LISTEN 1533/monerod

tcp 0 0 0.0.0.0:18081 0.0.0.0:* LISTEN 1533/monerod

tcp 0 0 127.0.0.1:18082 0.0.0.0:* LISTEN 1533/monerod

tcp 0 0 0.0.0.0:18083 0.0.0.0:* LISTEN 1533/monerod

18082 - не надо трогать. на 18083 будет стучаться p2pool -его надо открыть то же.) Я по аналогии с портом 18080 постараюсь разобраться дальше

magnoliya
() автор топика
Ответ на: комментарий от Anoxemian

Я исхожу из того, что у него все корректно с SNAT и 0/0 у него смотрит в wg.

Может и так.

Вот здесь он привел конфиг wireguard:

[Interface] Address = 10.0.0.2/32 PrivateKey = MY_PRIVATE_KEY DNS = 1.1.1.1

[Peer] PublicKey = iQFHSxCoxL8h/J72f9b5OXdQiGj12diTPo9oUb4UkAI= AllowedIPs = 0.0.0.0/0 Endpoint = PUBLIC_IP:51820 PersistentKeepalive = 20

Конфиг WireGuard на ВПС…

[Interface] Address = 10.0.0.1/32 SaveConfig = true ListenPort = 51820 PrivateKey = PRIVATE_KEY

[Peer] PublicKey = IYQV2KFHT9T4kPFDKjBTxJ1z+7/ZMmRd4fUo99pu+FA= AllowedIPs = 10.0.0.2/32
kostik87 ★★★★★
()
Ответ на: комментарий от Anoxemian

да…0/0 компа того что за нат, смотрит в wg. Я в конфиге это указал, что бы весь траффик шел в wg. AllowedIPs = 0.0.0.0/0

конфиг клиента

[Interface]

Address = 10.0.0.2/32

PrivateKey = PRIVAT_KEY

DNS = 1.1.1.1

[Peer]

PublicKey = iQFHSxCoxL8h/J72f9b5OXdQiGj12diTPo9oUb4UkAI=

AllowedIPs = 0.0.0.0/0

Endpoint = PUBLIC_IP:51820

PersistentKeepalive = 20

magnoliya
() автор топика
Ответ на: комментарий от magnoliya

Ты - молодец. Все корректно.

Я, правда бомлю из-за /32, но это не касается твоей проблемы. Моя позиция - корректней указывать /30

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от kostik87

я думаю, что мне надо весь входящий траффик с eth0 направить на локальный адрес клиента 10.0.0.2 через интерфейс wg0. Подскажите какое правило прописать ? щас попробую.

magnoliya
() автор топика
Ответ на: комментарий от magnoliya

Нет, тебе надо входящий трафик с eth0 по порту 18080 направить на твой комп. Правило я тебе написал выше.

Если ты сейчас перенаправишь весь трафик, то будет беда,

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от magnoliya
Ответ на: комментарий от magnoliya

Написано - use dash. Я от балды писал, синтаксис не проверял. Там для нескольких портов что-то вроде -m multiport надо, ну либо трижды повтори правила с разными портами.

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от Anoxemian

Ребята ! по ходу все работает ! Вы Гении ! Как сделать что бы правило сохранялось при поднятии интерфейса и его убирать при его опускании в конфиге WireGuard . посмотрите так ? Использовать -D ?

PostUp = iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 18080 -j DNAT –to-destination 10.0.0.2:18080

PostDown = iptables -t nat -D PREROUTING -i eth0 -p tcp –dport 18080 -j DNAT –to-destination 10.0.0.2:18080

magnoliya
() автор топика