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
()
Ответ на: комментарий от 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
()