Как стать автором
Обновить

Комментарии 24

Там больше вопросов было почему не папка /etc/openvpn/client. Т/к она по дефолту уже создается.

Потому что не всем удобно запускать и клиенты, и серверы через один юнит openvpn@

А всё остальное в общем-то написано в /usr/share/doc/openvpn/README.systemd (спойлер - systemctl cat openvpn-client@)

Да, у нас такое же сегодня вылезло - сам с этим не разбирался

wireguard? Быстрый, легкий, клиенты под все платформы

Будьте добры, поясните про вайргард. Вот я купил VPN, поставил wireguard на комп, настроил конфиг как описано на сайте провайдера VPN, а что дальше делать чтобы трафик шел через него (весь) не понятно. ОС — linux mint.
Спасибо!

В конфиге выставить allowed-ips в 0.0.0.0/0

и nat сделать не забыть!

Дяденьки, я так-то ненастоящий сварщик. А где это всё прописывать? Буду признателен за некий пошаговый гайд для не очень опытных юзеров ПК.

впрочем вот:

wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

Добавили свой push route "151.101.37.183 255.255.255.255"

Ну такое, я бы добавил всю их подсеть. Потом этот ip уедет куда-нибудь на другой поддомен и будете опять искать почему не работает

У кого какие идеи решения проблемы с terraform

Можно просто прокси поднять и ходить на условный releases.mydomain.ru/terraform

Да, зеркало-прокси. Nexus или что-то специфическиое

И стабильнее, и дешевле, и надёжнее

В данном случае и http-proxy хватит обычного.

Вы не могли скачать дистрибутивы или terraform при своей работе зачем-то стучится к hashicorp?

плюсую к вопросу…

Простой пример:
Скачали дистрибутив(пакет) python, он работает. Если работали с python у него есть библиотеки разные. Это все равно, что выкачать все python библиотеки.
Так вот, у нас в jenkins ( Gitlab, который хранит на ранерах это кэш) использует терраформ в контейнере, который после использования захлопывается. Кэша нету, отсюда проблема.

Он стучится в хашикорп при init, если отсутствует каталог с провами.

Ну а так, относительно терраформа доступ закрыт для:

registry.terraform.ioreleases.hashicorp.com

Ну у нас, на ранерах гита в кэше пакеты остались там проблемы нет.

Удобно спасибо gitlab

Простите, но там ссылка на GitHub, не GitLab :)

В случае, если VPN/proxy по каким-нибудь причинам нельзя, можно настроить provider mirror:
https://www.terraform.io/internals/provider-network-mirror-protocol
При этом в jenkins можно в образ пропихнуть ~/.terraformrc

Express42 (вслед за Яндекс [https://hashicorp-releases.website.yandexcloud.net/]) сделали такое зеркало:
https://hc-mirror.express42.net/
, но для providers оно не подходит.
Набросал "на коленке" небольшой прокси, чтобы подходило:
https://github.com/s-starostin/hashicorp-proxy

Вариант .terraformrc:

provider_installation {
  network_mirror {
    url = "https://registry/providers/"
    include = ["registry.terraform.io/hashicorp/*"]
  }
  direct {
    exclude = ["registry.terraform.io/hashicorp/*"]
  }
}

Есть ли у кого-нибудь пример использования  https://hashicorp-releases.website.yandexcloud.net или https://hc-mirror.express42.net/ ?
У меня выдает ошибки.

terraform {
  required_providers {
    template = {
      source = "hashicorp-releases.website.yandexcloud.net/hashicorp/template"
      version = "2.2.0"
    }
    local = {
      source = "hc-mirror.express42.net/hashicorp/local"
      version = "2.2.2"
    }
  }
}

Ошибки

╷
│ Error: Invalid provider registry host
│
│ The host "hashicorp-releases.website.yandexcloud.net" given in in provider source address
│ "hashicorp-releases.website.yandexcloud.net/hashicorp/template" does not offer a Terraform provider registry.
╵

╷
│ Error: Invalid provider registry host
│
│ The host "hc-mirror.express42.net" given in in provider source address "hc-mirror.express42.net/hashicorp/local" does not offer a Terraform
│ provider registry.

либо

provider_installation {
  network_mirror {
    url = "https://hc-mirror.express42.net" # или hashicorp-releases.website.yandexcloud.net
    include = ["registry.terraform.io/hashicorp/*"]
  }
  direct {
    exclude = ["registry.terraform.io/hashicorp/*"]
  }
}

выдают ошибку

405 Method Not Allowed


Всё так, ведь у этих зеркал не реализован network mirror protocol.
https://www.terraform.io/internals/provider-network-mirror-protocol
(особенно вот сюда обратите внимание:
https://www.terraform.io/internals/provider-network-mirror-protocol#list-available-versions
https://www.terraform.io/internals/provider-network-mirror-protocol#list-available-installation-packages)

Можно сделать, например, так (вариант не самый лучший):

  1. Нужно убедиться, что установлен python3 (у меня 3.6.9)

  2. git clone https://github.com/s-starostin/hashicorp-network-mirror

  3. cd hashicorp-network-mirror && mkdir files

  4. touch download.sh

  5. В download.sh:

#!/usr/bin/env bash

source_host="https://hc-mirror.express42.net/"
tmp_dir="./"
hashicorp_network_mirror_config_file="./config.yaml"
fileserver_mirror_dir="files"

set -o pipefail
mkdir -p "$tmp_dir"
truncate -s0 "$tmp_dir/wgetlog.txt"
wget -P "$tmp_dir" --spider --recursive --no-verbose "$source_host" >"$tmp_dir/wgetlog.txt" 2>&1 || { [ $? -ne 0 ] && [ $? -ne 8 ] && echo "Success" || exit 1; }
echo "Filtering resource links..."
sed -n 's|^.\+ URL:[ ]*http[s]*:\/\/[^\/]\+\/\([^ ]\+\) .\+|\1|p' "$tmp_dir/wgetlog.txt" | sed 's|&|\&amp;|' | grep -P '(?<!\/|robots\.txt)$' > "$tmp_dir/temp.txt"

truncate -s0 "$tmp_dir/results.txt"
for i in $(sed -n "s|^\([^\/]\+\)\/\([^\/]\+\).\+|\1\|\2|p" "$tmp_dir/temp.txt" | uniq | sort -Vr)
do
  IFS='|' read -r -a a <<< "$i"
  grep --color=never "${a[0]}/${a[1]}" "$tmp_dir/temp.txt" >> "$tmp_dir/results.txt"
done
rm "$tmp_dir/temp.txt"
for match in $(sed -n 's|^\s\+\([^:]\+\):\s\(.\+\)|\2|p' "$hashicorp_network_mirror_config_file")
do
  for arch in $(grep --color=never $match "$tmp_dir/results.txt")
  do
    echo $arch
    wget -q -x -P $fileserver_mirror_dir $source_host$arch || { [ $? -ne 0 ] && [ $? -ne 8 ] && echo "Success" || exit 1; }
  done
done

exit 0
  1. Загружаем официальные провайдеры в директорию files (процесс идёт около двух часов для списка провайдеров из config.yaml):
    chmod +x download.sh && ./download.sh

  2. Выпускаем сертификаты, например, с помощью setup-ssl-certificates.sh (или ставим свои, или настраиваем ssl termination)

  3. В config.yaml:
    путь к сертификату ssl_server_cert
    путь к ключу ssl_server_cert_key
    изменить directory на files/hc-mirror.express42.net

  4. chmod +x fileserver.py

  5. Запускаем сервер:
    sudo ./fileserver.py (или systemd unit, или иначе)

---
Работа:

  1. Убедимся, что fileserver работает по https (см. требования по terraform)
    curl https://<registry>/

...
<h1>Directory listing for /</h1>
<hr>
<ul>
<li><a href="terraform-provider-ad/">terraform-provider-ad/</a></li>
<li><a href="terraform-provider-archive/">terraform-provider-archive/</a></li>
<li><a href="terraform-provider-aws/">terraform-provider-aws/</a></li>
...
  1. Убедимся, что отрабатывает листинг версий для провайдеров (см. маппинг в config.yaml)
    curl https://<registry>/providers/registry.terraform.io/hashicorp/ad/index.json

{"versions": {"0.4.2": {}, "0.4.0": {}, "0.4.1": {}, "0.1.0": {}, "0.3.0": {}, "0.2.0": {}, "0.4.3": {}}}
  1. В ~/.terraformrc

provider_installation {
  network_mirror {
    url = "https://<registry>/providers/"
    include = ["registry.terraform.io/hashicorp/*"]
  }
  direct {
    exclude = ["registry.terraform.io/hashicorp/*"]
  }
}
  1. terraform init, plan, apply...

Может сделаете отдельный пост на хабре?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории