Рейтинг:0

Переадресация портов WireGuard с клиента на хост

флаг us

я пытаюсь подключить порт от клиента wireguard к хост-сети сервера.

Я пытался сделать это с помощью IPtables, но всегда получаю ответ «недоступен».

Кажется, что моя конфигурация может быть проблемой?

Спасибо!


ТЕСТ Соединение

root@wiretest3:~# curl -I 10.7.0.2:6060
HTTP/1.1 200 ОК
Сервер: nginx/1.20.1
Дата: воскресенье, 18 июля 2021 г., 10:37:38 по Гринвичу
Тип содержимого: текст/html
Длина контента: 988
Последнее изменение: сб, 17 июля 2021 г., 10:07:05 по Гринвичу
Соединение: Keep-alive
ETag: "60f2abc9-3dc"
Допустимые диапазоны: байты

root@wiretest3:~# curl -I 192.168.1.180:6060
curl: (28) Не удалось подключиться к порту 6060 192.168.1.180: время ожидания подключения истекло
root@wiretest3:~# curl -I 127.0.0.1:6060
curl: (7) Не удалось подключиться к порту 127.0.0.1 6060: соединение отклонено

Конфигурация сервера:

Хост: 192.168.1.183 Сеть Wireguard: 10.7.0.1

root@wiretest3:~# cat /etc/wireguard/wg0.conf
# Не изменяйте закомментированные строки
# Они используются wireguard-install
# КОНЕЧНАЯ ТОЧКА wireguard.demo.net

[Интерфейс]
Адрес = 10.7.0.1/24
PrivateKey = QAOETAJYMK3PcDhN/y+xFJKcJetm4...........
Порт прослушивания = 51823

# BEGIN_PEER клиент
[Вглядеться]
PublicKey = YxM7cwbmBm7VIyNcRdDBhtiEwFWL........
PresharedKey = W9Y0qCku0Fv1uFiMpy5ImStbs+.........
Разрешенные IP-адреса = 10.7.0.2/32, 192.168.1.183/32
# END_PEER клиент

IP а

root@wiretest3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости 
       valid_lft навсегда
2: eth0@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир 2e:f5:1e:38:32:06 brd ff:ff:ff:ff:ff:ff ссылка-netnsid 0
    инет 192.168.1.183/24 brd 192.168.1.255 глобальный охват eth0
       valid_lft навсегда
    ссылка на область inet6 fe80::2cf5:1eff:fe38:3206/64 
       valid_lft навсегда
3: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc mq состояние НЕИЗВЕСТНО группа по умолчанию qlen 500
    ссылка/нет 
    глобальная область действия inet 10.7.0.1/24 wg0
       valid_lft навсегда
    inet6 fe80::6613:2cc4:bb7d:6bd4/64 ссылка на стабильную конфиденциальность 
       valid_lft навсегда

Правила IPtables:

    iptables -P ПЕРЕДАЧА ПЕРЕДАЧИ;
    iptables -A FORWARD -i eth0 -j ПРИНЯТЬ;
    iptables -t nat -A PREROUTING -p tcp --dport 6060:6060 -j DNAT --to-destination 10.7.0.2;
    iptables -w -t nat -A POSTROUTING -o eth0 -j MASQUERADE;

IPtables: (iptables-сохранить)

root@wiretest3:~# iptables-save
# Сгенерировано iptables-save v1.8.7 в воскресенье, 18 июля, 13:17:28 2021 г.
*фильтр
:ВВОД ПРИНЯТЬ [0:0]
:ВПЕРЕД КАПИТЬ [0:0]
: ВЫВОД ПРИНЯТЬ [0:0]
-A ВВОД -p udp -m udp --dport 51823 -j ПРИНЯТЬ
-A ВПЕРЕД -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВПЕРЕД -s 10.7.0.0/24 -j ПРИНЯТЬ
-A ВПЕРЕД -i eth0 -j ПРИНЯТЬ
СОВЕРШИТЬ
# Завершено вс, 18 июля, 13:17:28 2021
# Сгенерировано iptables-save v1.8.7 в воскресенье, 18 июля, 13:17:28 2021 г.
*натуральный
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]
:ВВОД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТЬ [0:0]
:ОТПРАВКА ПРИНЯТИЯ [0:0]
-A PREROUTING -p tcp -m tcp --dport 6060 -j DNAT --to-destination 10.7.0.2
-A РАЗМЕЩЕНИЕ -s 10.7.0.0/24 ! -d 10.7.0.0/24 -j SNAT --к источнику 192.168.1.183
-A ПОСТРОЙКА -o eth0 -j МАСКАРАД
СОВЕРШИТЬ
# Завершено вс, 18 июля, 13:17:28 2021
root@wiretest3:~# 

IPtables: iptables -L -n -t nat (сейчас)

root@wiretest3:~# sudo iptables -L -n -t nat
Цепь PREROUTING (политика ПРИНЯТЬ)
целевая защита выбор источника назначения         
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6060 to:10.7.0.2

Сеть INPUT (политика ACCEPT)
целевая защита выбор источника назначения         

Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения         

Сеть POSTROUTING (правило ПРИНЯТЬ)
целевая защита выбор источника назначения         
SNAT все -- 10.7.0.0/24 !10.7.0.0/24 до:192.168.1.183
МАСКАРАД все -- 0.0.0.0/0 0.0.0.0/0 

Конфигурация клиента:

root@wiredocker:/etc/wireguard# cat /etc/wireguard/wg0.conf
[Интерфейс]
Адрес = 10.7.0.2/24
DNS = 8.8.8.8, 8.8.4.4
PrivateKey = GAF31cqwu2YSWQPdiSvlWie2Pma.........

[Вглядеться]
Публичный ключ = 3VMnaI8JvoXZ6DthLcDy5MnVmNq...............
PresharedKey = W9Y0qCku0Fv1uFiMpy5ImStbs+.............
Разрешенные IP-адреса = 0.0.0.0/0, ::/0, 192.168.1.0/24
Конечная точка = wireguard.demo.net:51823
ПостоянныйKeepalive = 25

IP а

root@wiredocker:/etc/wireguard# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости 
       valid_lft навсегда
2: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир 76:d3:5b:64:b4:f0 brd ff:ff:ff:ff:ff:ff ссылка-netnsid 0
    инет 192.168.178.178/24 brd 192.168.178.255 глобальный охват eth0
       valid_lft навсегда
    inet6 fe80::74d3:5bff:fe64:b4f0/64 ссылка на область видимости 
       valid_lft навсегда
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    ссылка/эфир 02:42:bb:9b:28:90 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 глобальная область действия docker0
       valid_lft навсегда
    inet6 fe80::42:bbff:fe9b:2890/64 ссылка на область видимости 
       valid_lft навсегда
10: veth508c767@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    ссылка/эфир ea:cd:96:6e:33:0b brd ff:ff:ff:ff:ff:ff link-netnsid 1
    ссылка на область inet6 fe80::e8cd:96ff:fe6e:330b/64 
       valid_lft навсегда
15: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/нет 
    глобальная область действия inet 10.7.0.2/24 wg0
       valid_lft навсегда
флаг us
@MichaelHampton добавил, извините.
Tom Yan avatar
флаг in
Всегда используйте `iptables-save`, чтобы поделиться своими правилами
Tom Yan avatar
флаг in
Я предлагаю вам пока оставить таблицу `filter`. Лучше сначала заставить `nat` работать так, как вы хотели.
флаг us
@TomYan теперь добавлено сохранение iptables, фильтр таблиц?
Рейтинг:0
флаг in

оказывается делает ДНКТ вот так для 127.0.0.1 представляется неосуществимым (ну, по крайней мере, в случае ВЫВОД), вероятно, из-за того, что 127.0.0.0/8 являются из хост области или аналогичные причины.

Однако следующие nftables набор правил должен помочь вам достичь того, чего вы хотите:

IP-адрес таблицы переписать {
        цепь размотать {
                type фильтр приоритета вывода обработчика маршрута; политика принять;
                ip saddr 127.0.0.1 tcp dport 80 ip daddr set 10.7.0.2 ip saddr set 10.7.0.1
        }

        цепочка повторная петля {
                введите приоритет ввода хука фильтра 101; политика принять;
                ip saddr 10.7.0.2 tcp sport 80 ip saddr set 127.0.0.1 ip saddr set 127.0.0.1
        }
}
таблица ip реальный {
        цепочка назначения {
                type фильтр приоритета вывода хука nat; политика принять;
                ip ddr 192.168.1.183 tcp dport 80 dnat на 10.7.0.2
        }

        источник цепочки {
                введите nat hook приоритет постмаршрутизации srcnat; политика принять;
                ip daddr 10.7.0.2 tcp dport 80 snat на 10.7.0.1
        }
}

Вместо того, чтобы выполнять «правильный» NAT назначения, вам нужно вместо этого выполнить своего рода «неотслеживаемую» перезапись адреса назначения (и источника). С помощью тип маршрута chain будет выполнен поиск нового маршрута. Кроме того, вам нужно, чтобы ответный трафик имел свой источник и адреса назначения меняются обратно на 127.0.0.1 так что завиток может распознавать трафик.

С хук вход, Это должен (т. е. НЕ ПРОВЕРЕНО) позволяет избежать нежелательной перезаписи для трафика, который не предназначен для самого хоста (т. е. отвечает трафику для переадресованного трафика). С другой стороны, приоритет 101 (т.е. 1 больше, чем srcnat / все стандартные приоритеты) позволит избежать нежелательной перезаписи ответов, которые отвечают на запросы, которые были должным образом обработаны NAT.

Как видите, для 192.168.1.183 В этом случае за таблицей для 127.0.0.1 особый случай.

Обратите внимание, что этот набор правил предназначен только для завитокing изнутри контейнера (или, в лучшем случае, его хоста; я не знаком с контейнерами и, насколько мне известно, для них может быть другой сетевой подход). Если вам, например, нужен контейнер для переадресации на некоторые другие хосты в 192.168.1.0/24, вам дополнительно понадобятся такие же ДНК правило в цепочке тип nat hook предварительная маршрутизация приоритет dstnat. IP-переадресация также должна быть включена и разрешена. И, как я уже сказал, я НЕ уверен, что приведенные выше приемы переписывания для 127.0.0.1 будет конфликтовать с этим.

флаг us
iptables-restore-translate -f rules.txt дает мне «iptables-translate-restore: строка 1 не удалась»
Tom Yan avatar
флаг in
`nft -f rules.txt`
флаг us
это работает хорошо !!, как я могу использовать это для большего количества портов? пример 80,6060,6061,6062, мне нужно сделать эти правила для каждого порта или я могу сделать для нескольких портов?
флаг us
когда я пытаюсь позвонить 192.168.1.183:6060 с другого компьютера в той же сети, которая снова недоступна:/
Tom Yan avatar
флаг in
Пожалуйста, прочитайте ответ внимательнее. Я уже упоминал, что нужно сделать дополнительно для этого случая. Адаптируйте/расширьте набор правил для дальнейших нужд. Обратите внимание, что цепочки не могут иметь одинаковые имена в одной и той же таблице. Кроме того, прежде чем читать новый файл набора правил с помощью `nft -f`, запустите `nft flush ruleset`, чтобы очистить старый. Вы также можете сделать так, чтобы правила применялись к большему количеству портов. IIRC вы можете использовать что-то вроде `{80, 6060-6062}`. Попробуйте найти/прочитать документацию по nftables. Просмотрите `man nft`, должно помочь.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.