Dockerized Wireguard с killswitch не разрешает локальный доступ к сервису, совместно использующему сеть

У меня есть два контейнера 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.

Итак

  • docker create --name = wireguard [...] -pq: q linuxserver / wireguard
  • docker create --name = X [...] --net = container: wireguard -e WebUI_Port = q X

Дополнительно я поставляю 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»: файловая система только для чтения как другой вывод.

0
задан 16 August 2020 в 14:43
1 ответ

Неважно, какие у вас маршруты, если ваш iptable отклоняет все с маршрутом LOCAL.

ПРИМЕЧАНИЕ!! Я не могу ручаться за безопасность этого, так как это то, что я собрал из разных источников...

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

Вот что у меня сработало после того, как я добавил необходимые маршруты:

В PostUp: iptables -A INPUT -p tcp -m tcp --dport -j ACCEPT Синтаксис или положение this важны. Я считаю, что -A добавляет его в конец, хотя я также добавил его после первой команды iptables для безопасности.

В PreDown: iptables -D INPUT -p tcp -m tcp --dport -j ACCEPT

И после этого я смог использовать указанный порт. Убедитесь, что вы правильно прокладываете маршруты. В файле readme linuxserver/wireguard есть (неофициальная) пара скриптов для этого, хотя они отмечают, что это не официальная рекомендация.

0
ответ дан 26 December 2020 в 02:34

Теги

Похожие вопросы