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

Проброс порта с белого IP в туннель wireguard

 , ,


1

1

Есть белый IP сервера: 89.25.107.134.

К серверу клиентом wireguard подцеплен роутер, IP клиента wg (роутера) - 10.0.1.2. За этим роутером, в его подсети, есть машина 192.168.1.15.

Мне нужно, чтобы при обращении к 89.25.107.134:24123 делался форвард на 192.168.1.15:24123.

С сервера, при подключенном клиенте wg (роутере), машина 192.168.1.15 пингуется.

Вбил на сервере нижеследующее, но не работает. Подскажите, пожалуйста, как исправить…

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i eth0 -o wg0 -p tcp --dport 24123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d 89.25.107.134 --dport 24123 -j DNAT --to-destination 192.168.1.15:24123
iptables -t nat -A POSTROUTING -p tcp --sport 24123 --dst 192.168.1.15 -j SNAT --to-source 89.25.107.134:24123


Последнее исправление: le_ (всего исправлений: 2)

1. Порт 24123/tcp на 192.168.1.15 кто-то слушает?
2. eth0 и wg0 у вас в наличии?
Ну и что бы два раза не вставать, показывайте выхлоп iptables-save, а то, то чего вы там навбивали нам неведомо.

anc ★★★★★★★★★★★★★★★★
()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от anc
# iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 89.25.107.134/32 -p tcp -m tcp --dport 24123 -j DNAT --to-destination 192.168.1.15:24123
-A POSTROUTING -d 192.168.1.15/32 -p tcp -m tcp --sport 24123 -j SNAT --to-source 89.25.107.134:24123
-A POSTROUTING -o eth0 -j MASQUERADE

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 993 -j ACCEPT
-A INPUT -i wg0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 24123 -j ACCEPT
-A FORWARD -i eth0 -o wg0 -p tcp -m tcp --dport 22000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i eth0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wg0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
-A FORWARD -o wg0 -j ACCEPT


# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 89.25.107.134  netmask 255.255.255.0  broadcast 89.25.107.255
        ether bc:24:11:5e:0b:6f  txqueuelen 1000  (Ethernet)
        RX packets 27675  bytes 3392624 (3.2 MiB)
        RX errors 0  dropped 129  overruns 0  frame 0
        TX packets 5755  bytes 1939943 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
        inet 10.0.1.1  netmask 255.255.255.0  destination 10.0.1.1
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 3122  bytes 1096472 (1.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3124  bytes 1145924 (1.0 MiB)
        TX errors 5  dropped 0 overruns 0  carrier 0  collisions 0
le_
() автор топика
Последнее исправление: le_ (всего исправлений: 1)
  1. добавить статический маршрут, что сеть 192.168.1.0/24 (или только один ip) находится за интерфейсом wg0

типа route add -net 192.168.1.0 netmask 255.255.255.0 gw wg0

ну или что там сейчас модно использовать для прописки маршрутов

  1. SNAT в твоем виде сработает, только если от клиента ответ придет на сервер по маршруту по-умолчанию. Т.е. клиент должен ответить роутеру с wireguard’oм и дальше твой сервер является гейтом по-умолчанию, иначе ответ уйдет не туда

и –sport 24123 ты откуда взял? имено SOURCE port

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

На второй вопрос там есть ответ.

nmap -Pn 192.168.1.15 -p24123
Starting Nmap 7.80 ( https://nmap.org ) at 2024-11-26 20:32 MSK
Nmap scan report for 192.168.1.15
Host is up (0.0016s latency).

PORT      STATE SERVICE
24123/tcp open  snapenetio
le_
() автор топика
Последнее исправление: le_ (всего исправлений: 1)
Ответ на: комментарий от futurama

Добавление статического маршрута не помогло… Этот маршрут, кстати, автоматически добавляется при подъеме wg (от настроек wg зависит).

–sport 24123 заменил на –dport 24123 - тоже не помогло…

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

игрался с nat и wg, правда по другому
На всякий случай добавлю, что у wg интерфейса mtu может быть меньше, чем размер пришедшего пакета (и нат там вроде еще своего добавляет), так что до клиента могут доходить неполные пакеты

xgatron
()

Ты молодец, что всем показал внешний IP и порт указал.

А тебе нужно сделать SNAT, т.е. машина, на которую ты делаешь проброс порта отправляет ответные пакеты на свой шлюз.

anonymous
()
Ответ на: комментарий от xgatron

На всякий случай добавлю, что у wg интерфейса mtu может быть меньше

MTU у wg как бы всегда меньше, чем на основном интерфейсе:

ifconfig | awk '/^[a-z0-9]+:/{ifs=$1;gsub(/.*mtu /,"",$0);print ifs, $0}'
# Линуксоиды с их iproute2 идут лесом. (=
em0: 1500
wlan0: 1500
lagg0: 1500
wg0: 1420
em0: 1500
wg0: 1420
wg1: 1420
vtnet0: 1500
wg0: 1420

// Везде дефолт, не было необходимости крутить яйца.


игрался с nat и wg

Играл с NAT.
Проиграл.

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

Совсем без этого правила работать не будет. Только нужно указать правильно адрес на который подменяется IP адрес источника.

Он должен указывать на IP адрес интерфейса Wireguard. А на 192.168.1.15 должен быть доступ до wireguard сети.

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

Совсем без этого правила работать не будет. Только нужно указать правильно адрес на который подменяется IP адрес источника.

Он должен указывать на IP адрес интерфейса Wireguard. А на 192.168.1.15 должен быть доступ до wireguard сети.

Спасибо! Это помогло.

В итоге правила такие:

iptables -A INPUT -p tcp -i eth0 --dport 24123 -j ACCEPT
iptables -A FORWARD -i eth0 -o %i -p tcp --dport 24123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o %i -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i %i -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d 89.25.107.134 --dport 24123 -j DNAT --to-destination 192.168.1.15:24123
iptables -t nat -A POSTROUTING -p tcp --dport 24123 --dst 192.168.1.15 -j SNAT --to-source 10.0.1.1:24123

где 10.0.1.1 - это IP серверного конца туннеля wg, %i - это интерфейс wg (эти правила прописываются в конфиге wg (PostUp)).

Примечание: если кто будет делать подобное, не забудьте про удаление правил (PostDown).

Теперь всё работает! Спасибо всем, кто помогал!

Ты молодец, что всем показал внешний IP и порт указал.

Фильм основан на реальных событиях, однако, все имена и фамилии вымышленные, любое совпадение с реальность следует считать случайностью.

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

Для твоей машины теперь все запросы, который приходят через внешний сервер, отображаются как с этого адреса?

Да, так и есть, на 192.168.1.15 соединения как-будто с 10.0.1.1. В принципе, это не критично. Но если есть не оч. сложная возможность сделать, чтобы отображались реальные адреса, подскажите, плз, как.

Роутер, кстати - Keenetic Extra, там не установлен opkg etc., старался делать всё штатными средствами, через web-интерфейс… Настройки wg, там несколько ограничены…

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

Вообще, решалось маркировкой соединений на микротике. На OpenWRT решалось PBRом.

На кинетике скорее всего этим решить можно https://help.keenetic.com/hc/ru/articles/360000521799, но тогда весь трафик (кроме локального?) к машине и от машины 1.15 пойдёт через wg .

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

На кинетике скорее всего этим решить можно https://help.keenetic.com/hc/ru/articles/360000521799, но тогда весь трафик (кроме локального?) к машине и от машины 1.15 пойдёт через wg .

Правильно ли я понял, что --to-source снова нужо будет указать 89.25.107.134:24123 и на Кинетеке в приоритетах подключений настроить так, чтобы 192.168.1.15 всегда выходил в Интернет только через wg?

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

MTU у wg как бы всегда меньше, чем на основном интерфейсе:

а из-за ната он становится еще меньше и дальше там прикол, что пинг через нат и wg проходит, а скачать что-нибудь не получается. Поэтому я и писал именно про размер пакета, т.к. пакет размером до ~1400 с большой вероятностью пройдет

Проиграл.

не угадал. Но каким было правило для победы уже и не вспомню

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

пинг через нат и wg проходит, а скачать что-нибудь не получается

У меня и наоборот бывало пару раз.

Проиграл.

не угадал.

Просто шутеечка вспомнилась. (=

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

Я тоже делал как ТС, создал wg client в openwrt, создал wg server в vps и дальше установил успешно туннель и далее на сделал проброс порта на vps и самое последнее это не забыть настроить маршрут на openwrt, чтобы пакеты от 192.168.1.15 обратно в туннель слало.

Niccobin
()