У меня есть два контейнера linuxserver / wireguard и X на Ubuntu (server) 20.04.
X имеет WebUI на порту q, к которому я хотел бы получить доступ через мою локальную сеть (192.168.178.0/24 - fritzbox).
Они настроены так, что X использует ту же «сеть», что и linuxserver / wireguard (через docker --net = container: wireguard). Кроме того, порт q, используемый X, указывается через -p q: q на linuxserver / wireguard.
Итак
Дополнительно я поставляю sysctls net.ipv4 .conf.all.src_valid_mark = 1 и net.ipv6.conf.all.disable_ipv6 = 0 .
Клиентский файл wg0.conf Wireguard не настроен следующим образом:
[Interface]
PrivateKey = [...]
Address = [...]
DNS = [...]
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
[Peer]
PublicKey = [...]
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = [...]
Запуск обоих контейнеров Я надеялся получить доступ к WebUI, но, к сожалению, этого не произошло. Поскольку я не уверен, связана ли это с докером или защитой проводов, надеюсь, вы можете здесь помочь.
Я дополнительно попытался добавить правила
ip route add 192.168.178.0/24 via $(ip route show default | awk '/default/ {print $3}')
(как дополнительная команда) и
! -d 192.168.178.0/24
(внутри команды iptables), но не получил никаких результатов.
В журналах linuxserver / wireguard я обнаружил только sysctl: setting key «net.ipv4.conf.all.src_valid_mark»: файловая система только для чтения
как другой вывод.
Неважно, какие у вас маршруты, если ваш iptable отклоняет все с маршрутом LOCAL
.
ПРИМЕЧАНИЕ!! Я не могу ручаться за безопасность этого, так как это то, что я собрал из разных источников...
Что вам нужно сделать, так это разрешить трафик через брандмауэр только для вашей службы, надеюсь, сохраняя переключатель уничтожения для всего, кроме этого единственного порта.
Вот что у меня сработало после того, как я добавил необходимые маршруты:
В PostUp: iptables -A INPUT -p tcp -m tcp --dport
Синтаксис или положение this важны. Я считаю, что -A
добавляет его в конец, хотя я также добавил его после первой команды iptables
для безопасности.
В PreDown: iptables -D INPUT -p tcp -m tcp --dport
И после этого я смог использовать указанный порт. Убедитесь, что вы правильно прокладываете маршруты. В файле readme linuxserver/wireguard есть (неофициальная) пара скриптов для этого, хотя они отмечают, что это не официальная рекомендация.