自宅のマシンからWebサイトをホストするにはどうすればよいですか? DynDNSアドレスを持っているので、外部IPが変わってもマシンにアクセスできます。
たとえば、example.dyndns-home.com
でマシンにアクセスできるとしましょう(これはDynDNSの無料サービスです)。 GoDaddyからWebサイトのドメイン名を登録しました。ドメイン名がexample.com
だとしましょう
現在、ポート80を転送したので、どこからでもexample.dyndns-home.com
を入力でき、ホームボックスでホストしたものをすべて見ることができます。
www.example.com
を入力したときに同じものが表示されるようにするにはどうすればよいですか? example.com
を介して、自宅のマシンでホストしているものをインターネット上で見たい。
www.example.com
からexample.dyndns-home.com
を指すcnameレコードをドメインのDNSレコードに追加します。私は1つのドメインレジストラー(Godaddyではない)を使用したことがありますが、DNSレコードを更新できるきちんとしたWebインターフェイスがあります。
生の例:
www.example.com.
43200
IN
CNAME
example.dyndns-home.com.
実際の例が提供されています 、少なくともGoogleのネームサーバーを使用しています。
http://example.com
も機能させたい場合は、example.com
からexample.dyndns-home.com
に2番目のエントリを追加する必要があります。これは@.example.com
を転送することで実現できますが、それが標準かどうかはわかりません。
最後に、問題は何ですか?私にとっては、ISPがポート80と8080をブロックするため、別のポートで動作するようにWebサイトを構成します。
http://exapmle.dyndnsorg:5060
1- Dyn Standard Dnsで14日間の試用期間に登録します
2- dyndnsからのDNSを使用してドメインを構成します
xxxx.dns.dyn.com
xxxx.dns.dyn.com
xxxx.dns.dyn.com
xxxx.dns.dyn.com
3-たとえば、ドメインをDynDnsドメインに転送するために、新しいWebHopを作成します
Host-name : example.com
Service : WebHop
Details : http://example.dyndns.org:5060
Linuxを実行しているサーバーがあり、GoDaddyによってホストされているDNS上のホームサーバーのIPでDNS Aレコードを更新する場合、ホームサーバーで次の操作を実行できます。 EULAに違反することに注意してください。必ずルールに従ってください!
Python2.7をインストールします(おそらく既にインストールされています)。
次のファイルを/config/scripts/godaddy_ddns.py
に配置します。 pygodaddyライブラリを使用してgodaddyを更新する実際の作業を行う部分です。 godaddyアカウントに関連付けられているすべてのドメインが更新されます。 「@」サブドメインワイルドカードのAレコードを設定します。代替サブドメインを指定する場合は、これを編集できます。また、「@USERNAME@
」をgodaddyユーザー名に、「@PASSWORD@
」をgodaddyパスワードに置き換える必要があります。
#!/usr/bin/env python
import logging
import pif
import pygodaddy
# Original Source:
# https://saschpe.wordpress.com/2013/11/12/godaddy-dyndns-for-the-poor/
# https://github.com/observerss/pygodaddy
#
# Modified by Jeremy Sears (https://stackoverflow.com/users/1240482/jsears)
logging.basicConfig(filename='godaddy.log', format='%(asctime)s %(message)s', level=logging.INFO)
# the "requests" library logs noisily, so turn that off
logging.getLogger("requests").setLevel(logging.WARNING)
logging.debug("DEBUG: Running godaddy_ddns.py");
U="@USERNAME@"
P="@PASSWORD@"
client = pygodaddy.GoDaddyClient()
success = client.login(U,P)
if success:
logging.debug("DEBUG: Successfully logged in.")
else:
logging.error("ERROR: Failed to log in to godaddy.com with username: '{0}'.".format(U))
for domain in client.find_domains():
logging.debug("DEBUG: Looking up DNS Records for {0}.".format(domain))
dns_records = client.find_dns_records(domain)
public_ip = pif.get_public_ip()
logging.debug("DEBUG: Domain '{0}' DNS records: {1}".format(domain, dns_records))
logging.debug("DEBUG: Current Public IP '{0}'.".format(public_ip))
if len(dns_records) == 0:
logging.debug("DEBUG: No existing DNS records found.")
else:
logging.debug("DEBUG: Existing IP in DNS is '{0}'.".format(dns_records[0].value))
if len(dns_records) == 0 or public_ip != dns_records[0].value:
logging.debug("DEBUG: Updating A record for domain '{0}'.".format(domain))
success = client.update_dns_record("@."+domain, public_ip)
if success:
logging.info("INFO: Domain '{0}': Successfully set public IP to '{1}'.".format(domain, public_ip))
else:
logging.error("ERROR: Domain '{0}': Unable to update public IP to '{1}'.".format(domain, public_ip))
else:
logging.info("INFO: Public IP A record DNS record for domain '{0}' is up to date, and does not need to be updated.".format(domain))
Sudo chown root /config/scripts/godaddy_ddns.py
を実行します
Sudo chmod u+x /config/scripts/godaddy_ddns.py
を実行します次のファイルを/config/scripts/godaddy_ddns.sh
に配置します。これは、pythonスクリプトで使用されるライブラリを分離するためにvirtualenvをセットアップするラッパースクリプトです。次に、上記のpythonスクリプトを呼び出します。
#!/bin/sh
# Original Source:
# https://saschpe.wordpress.com/2013/11/12/godaddy-dyndns-for-the-poor/
# https://github.com/observerss/pygodaddy
#
# Modified by Jeremy Sears (https://stackoverflow.com/users/1240482/jsears)
OLD_PWD=$PWD
ROOT_DIR=$(dirname $0)
if [ -n "$1" ] ; then
WORKING_DIR=$1
else
WORKING_DIR=$ROOT_DIR
fi
mkdir -p $WORKING_DIR
cd $WORKING_DIR
if [ ! -d .venv27 ] ; then
curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.tar.gz
tar xvfz virtualenv-1.9.tar.gz
python virtualenv-1.9/virtualenv.py .venv27
fi
source .venv27/bin/activate
pip install -q --upgrade pif pygodaddy
$ROOT_DIR/godaddy_ddns.py
deactivate
cd $OLD_PWD
Sudo chown root /config/scripts/godaddy_ddns.sh
を実行します
Sudo chmod u+x /config/scripts/godaddy_ddns.sh
を実行します次のファイルを/etc/cron.hourly/run_godaddy_ddns
(ファイル拡張子なし)に配置します。これにより、godaddy_ddns.shスクリプトが1時間ごとに呼び出されます。
#!/bin/sh
WORKING_DIR=/var/local/godaddy_ddns
exec /config/scripts/godaddy_ddns.sh $WORKING_DIR
exit 0
Sudo chown root /etc/cron.hourly/run_godaddy_ddns
を実行します
Sudo chmod u+x /etc/cron.hourly/run_godaddy_ddns
を実行しますgodaddy.log
ディレクトリの/var/local/godaddy_ddns
に書き込まれます。このディレクトリは、run_godaddy_ddnsスクリプトを編集して変更できます。次のファイルを/etc/logrotate.d/godaddy_ddns
(ファイル拡張子なし)に配置します。これにより、ログファイルをローテーションすることにより、ログファイルがディスクをいっぱいにしないようにします。ロギングの場所を変更した場合は、ログファイルの場所を編集する必要があります。
/var/local/godaddy_ddns/godaddy.log {
weekly
missingok
rotate 12
compress
delaycompress
notifempty
copytruncate
maxage 365
}
また、GoDaddyドメインマネージャーにCNAMEレコードを追加して、「www
」を「@
」にポイントする必要があります。
セキュリティに関する注意:スクリプトがより制限された権限で実行されるように、おそらくルート以外のユーザーに対してrun_godaddy_ddns
スクリプトとsu
を編集する必要があります。
ダイナミックDNS機能をサポートするレジストラにドメインを登録/移動します。 Namecheap.com はそのようなレジストラの1つです。手順は ナレッジベース内 です。タイプ「A +ダイナミックDNS」のサブドメインエントリを作成することにより、サブドメインのダイナミックDNSを有効にできることに注意してください。
ddclient
パッケージのデフォルトの構成(少なくともArch Linuxの場合)には、このレジストラのプロトコルの設定が含まれています。
##
## NameCheap (namecheap.com)
##
protocol=namecheap, \
server=dynamicdns.park-your-domain.com, \
login=YOUR-TOP-LEVEL-DOMAIN, \
password=HEX-PASSWORD-FROM-DASHBOARD \
YOUR-DYNAMIC-SUBDOMAIN.YOUR-TOP-LEVEL-DOMAIN