バグレポート ダイナミックDNSにおけるTP障害について などで報告しているように、Dynamic DNSを用いた自宅サーバーにおいて、自宅サーバーのIPが変更されると、テレポートに障害が出ます。この問題の調査は継続中ですが、シノバーのSIM群では次のような応急的対処をしています。参考までに紹介します。
要はROBUSTサーバーなどにDNSを引かせないように、Region.ini に記載される ExternalHostName にFQDNではなく、直接グローバルIPを書き込んでしまいます。
添付のスクリプトは SIMサーバー起動時にグローバルIPを調べ、Regions.ini を書き換えます。グローバルIPが変わるたびにこのスクリプトを起動すればよいのですが、現在はこのスクリプト起動を手動で行ってますす。SIMサーバーを外から正常終了させる方法が分からないので。良い方法があればお教えください。killall mono とかで強制的にシャットダウンさせても問題はないのかも?
添付スクリプトで外部IPの取得には icanhazip.com を利用してます、IPアドレスを返してくれるようです。特権ユーザ rootで動作するパピーリナックスで書いていますので、SIMサーバーを非特権ユーザである opensim で実行するよう細工しています。もともと非特権ユーザで起動される環境では、そこのところは修正してください。シェルは bash です、
#!/bin/sh # see my location MYNAME=$(basename $0) TMPFILE=/tmp/$MYNAME.txt APP=$(readlink -e $0) [ "$APP" ] || APP=$0 APPDIR=$(dirname "$APP") [ "$APPDIR" = "." ] && APPDIR=$(pwd) GUEST_PREFIX=$APPDIR/opensim-0.8.2.1-jog GUEST_BINDIR=$GUEST_PREFIX/bin REGIONFILE=$GUEST_BINDIR/Regions/Regions.ini #rewrite IP if [ ! -r "$REGIONFILE" ]; then echo "'$REGIONFILE' not found." exit 1 fi if [ ! -w "$REGIONFILE" ]; then echo "'$REGIONFILE' rewriting denied.." exit 1 fi echo "Trying to get the external IP..." EXTERNALIP=$(wget -t 3 -O - -q icanhazip.com) if [ -z "$EXTERNALIP" ]; then echo "External IP cannot obtained." exit -1 fi sed -e 's/ExternalHostName.*$/ExternalHostName = '$EXTERNALIP'/g' "$REGIONFILE" > "$TMPFILE" if [ ! -s "$TMPFILE" ]; then echo "Rewriting failed." exit 1 fi mv -f "$TMPFILE" "$REGIONFILE" echo "'$REGIONFILE' updated." # clear old stuff rm -f "$GUEST_BINDIR"/OpenSim.log* rm -fr "$GUEST_BINDIR"/assetcache #launch opensim chown opensim.opensim -R "$GUEST_BINDIR" export PATH="$PATH:$GUEST_BINDIR" export HOME="$APPDIR" cd "$GUEST_BINDIR" sudo -u opensim mono OpenSim.exe