NAT+VM環境でBigbluebuttonサーバを立ててみた(その2)
ドメインの取得
その1でUbuntuの仮想マシンを構築した。
https://qiita.com/maron2000/items/4ff878c1984f408efb4c
ここでは、フリーのドメインと、ワイルドカードのSSL証明書(必須ではない)を取得する。
当方はIPアドレス非固定なので、Cloudflareを使って定期的にDNSを更新するスクリプト※も作成した。
※後述するが、Cloudflareで若干の問題ありのため、対応検討中。
1.フリーのドメイン取得
色々なところでフリーのドメインを取得可能である。
自分はfreenom https://www.freenom.com/ja/index.html で取得した。
手続きは難しくないが、日本語でも詳細な解説があるので、そちらを参照されたい。
5種類のドメインから選べるようになっているが、選択しても「利用不可」となる場合は、TLD(Top Level Domain)も含めて入力(hogehoge→hogehoge.tk)すると良い。
freenomでドメインの取得
https://qiita.com/hanbaga324/items/da0c4f6fa8d365db10c9
2.DNSサーバの登録 (非固定アドレス対応)
非固定のIPアドレス変更をスクリプトから反映するために、CloudflareのDNSサービスに切り替える。
(ただし、一部TLDで問題あり。下記の※参照)
次のページも参考になる。
https://outlook.aptrust.net/start-up-cloudflare-free-plan/
- Cloudflareにサインアップ https://dash.cloudflare.com/sign-up?lang=ja-jp
- ドメイン名を設定
- 設定プランを選択 (FreeプランでOK)
- DNSレコードの設定(IPv4はAレコード、IPv6はAAAAレコード)
- 名前: ドメイン名 コンテンツ: IPアドレス
- (必要に応じて)名前: サブドメイン(wwwなど) コンテンツ: IPアドレス
- ドメイン(上記の例ではfreenom)のネームサーバーをCloudflareへ変更する
- 上記でDNSレコードを設定すると、ドメインのネームサーバーを変更するような指示の画面が表示される
- 一旦、別のウィンドウでfreenomの設定画面を開き、ネームサーバをfreenomからCloudflareの指示の通りに変更 (https://my.freenom.com/knowledgebase.php?action=displayarticle&id=3)
- Cloudflareのウィンドウに戻り、手続きを進める
- 上記設定が反映されるとCloudflareから設定完了メールが届く
※IPアドレスはルータの設定画面などで確認可能。
確認用サイト例:https://whatismyipaddress.com/
※4/23よりCloudflareでfreenomで取得できるドメインに DDNSの設定関連で制限 がかかっているので、freenomのままとするか、他のサーバも検討して下さい。
https://community.cloudflare.com/t/unable-to-update-ddns-using-api-for-some-tlds/167228
※freenomでDDNSするスクリプトもあるようです。(未検証)
https://github.com/maxisoft/Freenom-dns-updater
3.DDNS設定用データの取得
IPアドレスの変更をCloudflareに反映させるための設定用データ(ゾーンIDとAPIトークン)を取得する。
-
APIトークン(上図の「APIトークンを取得」→「トークンを作成する」)
- 「ゾーンDNSを編集する」のテンプレートを使用
- 「ゾーンリソース」の指定を「特定のゾーン」-「ドメイン名」とする
- 「概要に進む」→「トークンを作成する」でAPIトークンが表示される
※表示されるトークンは再表示できないので、控えておくこと。
4.IPアドレス変更をCloudflare DNSに反映するスクリプト
定期的にIPアドレスを確認し、CloudflareのDNSレコードと異なる場合は更新するスクリプト。
#!/bin/bash
# 参考: https://gist.github.com/lifehome/eb3f7d798f9bc6720cdc7d2be1238d4f
# CHANGE THESE
# auth_email="XXXXXXXX@XXXXXXXXXXX" # The email used to login 'https://dash.cloudflare.com'
# auth_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
api_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #3.で取得したAPIトークン
record_name="www.hogehoge.com" # Which record you want to be synced
zone_identifier="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #3.で確認したZone ID
# DO NOT CHANGE LINES BELOW
while [ -z $ip ]
do
ip=$(curl -s https://ipv4.icanhazip.com/) # IPアドレスの取得
sleep 1s
done
echo `date`
# SCRIPT START
echo "[Cloudflare DDNS] Check Initiated"
# Seek for the record
record=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $api_token")
# -H "X-Auth-Key:$auth_key" \ #APIトークンがうまく使えない場合のみ
# -H "X-Auth-Email:$auth_email") #APIトークンがうまく使えない場合のみ
#echo "$record"
# Can't do anything without the record
if [[ $record == *"\"count\":0"* ]]; then
>&2 echo -e "[Cloudflare DDNS] Record does not exist, perhaps create one first?"
exit 1
fi
# Set existing IP address from the fetched record
#old_ip=$(echo "$record" | grep -Po '(?<="content":")[^"]*' | head -1)
old_ip=$(echo "$record" | grep -Po '(?<="content": ")[0-9\.]*')
echo "old_ip = $old_ip"
# Compare if they're the same
if [ $ip == $old_ip ]; then
echo "[Cloudflare DDNS] IP has not changed."
exit 0
fi
echo "old_ip = $old_ip"
# Set the record identifier from result
#record_identifier=$(echo "$record" | grep -Po '(?<="id":")[^"]*' | head -1)
record_identifier=$(echo "$record" | grep -Po '(?<="id": ")[0-9a-f]*')
echo "record_identifier = $record_identifier"
# The execution of update
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" \
-H "Authorization: Bearer $api_token" \
-H "Content-Type: application/json" \
--data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"proxied\":false,\"name\":\"$record_name\",\"content\":\"$ip\"}")
# The moment of truth
case "$update" in
*"\"success\":false"*)
>&2 echo -e "[Cloudflare DDNS] Update failed for $record_identifier. DUMPING RESULTS:\n$update"
exit 1;;
*"\"error\""*)
>&2 echo -e "[Cloudflare DDNS] Update failed for $record_identifier. DUMPING RESULTS:\n$update"
exit 1;;
*)
echo "[Cloudflare DDNS] IPv4 context '$ip' has been synced to Cloudflare.";;
esac
※上述しましたが、freenomでDDNSするスクリプトもあるようです。(未検証)
https://github.com/maxisoft/Freenom-dns-updater
スクリプトを適当なところ(/usr/local/binなど)に保存し、crontabで自動実行の設定(再起動時と5分おきにIPアドレスを確認)
sudo chown root:root dns-update.sh
sudo chmod 700 dns-update.sh
sudo crontab -e
#以下の2行を追加
4-59/5 * * * * bash /usr/local/bin/dns-update.sh > /var/log/dns-update.log 2>&1
@reboot bash /usr/local/bin/dns-update.sh > /var/log/dns-update.log 2>&1
ワイルドカードSSL証明書(Let's Encrypt)の取得
BigBlueButtonのインストーラでSSL証明書の取得も自動でやってくれるのだが、ワイルドカードのSSL証明書を使いたいので、自分でインストールを実施することにした。
(ワイルドカードでなくてもいいや、という人はこちらを飛ばしてもインストールは可能)
※参考:https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx
https://qiita.com/HeRo/items/f9eb8d8a08d4d5b63ee9
1.Certbotのインストール
# Certbot PPAインストール
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
#Certbot インストール
sudo apt-get install certbot python3-certbot-nginx
#DNSプラグイン(ここではCloudflare)
sudo apt-get install python3-certbot-dns-cloudflare
※DNSプラグインについては、https://certbot.eff.org/docs/using.html#dns-plugins参照
2.設定用データの作成
# Cloudflare API token used by Certbot (上記「ドメイン取得」の3.で取得したAPIトークン)
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567
#certbotのバージョンが古い(2.3.1未満)場合、APIトークン使用不可。APIキーはAPIトークン取得のページから取得可能
dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234
# 権限を設定しておく
sudo chown root:root ~/.secrets/certbot/cloudflare.ini
sudo chmod 600 ~/.secrets/certbot/cloudflare.ini
3.SSL証明書の取得
#DNSプラグインを使う場合
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
-d *.example.com
#DNSプラグインを使わない場合 (途中で指示されたTXTレコードを手動でDNSサーバに登録)
sudo certbot certonly --manual \
--preferred-challenges=dns \
--email [email protected] \
--agree-tos \
-d *.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.bbb.example.com with the following value:
0bIA-3-RqbRo2EfbYTkuKk7xq2mzszUgVlr6l1OWjW8
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
#画面表示に合わせて、レコードを作成する。
#設定したらEnterを押せと書いてあるが、その前にレコードが拡散されるまで1分程度待つこと。
_acme-challenge.bbb.example.com. TXT "0bIA-3-RqbRo2EfbYTkuKk7xq2mzszUgVlr6l1OWjW8" 60
その3へ
その3でいよいよBigBlueButtonをインストールする。
https://qiita.com/maron2000/items/e81ff9f5196dcf78cd87
Author And Source
この問題について(NAT+VM環境でBigbluebuttonサーバを立ててみた(その2)), 我々は、より多くの情報をここで見つけました https://qiita.com/maron2000/items/834aa44d380f0f1312ce著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .