
私は家のLANのRaspberry PiでXMPPサーバーを実行しています。私のルーターの外部IPを指すようにドメインを登録し、ポートが私のルーターに転送されました。ただし、LANに接続すると、外部ドメイン/ IPが利用できなくなり、外出時にのみ使用できます。サーバーがローカル(192.168.xxを指す)であるかリモートであるかを認識するように自宅のコンピュータを構成するより簡単な方法は何ですか?
答え1
Raspberry Piに軽量DNSサーバーを設定し(dnsmasq
この目的のために設定がより簡単なため、「標準」ISC BINDサーバーを使用することをお勧めします)、LANに接続されているすべてのデバイスのプライマリDNSサーバーとして構成します(ほとんどDHCP構成で) 。
DNS 構成では、ドメインをローカル 192.168.xx アドレスとして指定して、LAN 内のインターネットグローバルドメインポインタをオーバーライドします。他のすべてのクエリをLAN外の適切なDNSサーバー(ISP DNSなど)に転送するようにDNSを構成します。
これにより、LANデバイスがドメインを照会するときにローカルサーバーアドレスを取得します。デバイスが移動しているときは、LANの外側のDNSサーバーから「実際の」外部IPを取得します。
答え2
以前の別の答えが示唆したように、raspiの小さなDNSサーバーを使用してこれを行うことができます。望ましくなく、名前解決が/etc/hostsを最初に見つけるように設定されている場合は、次のスクリプトを使用して実行する操作を決定できます。
domain=mydomain.com # modify as needed
domain_INT_IP=192.168.1.10 #modify as needed
home_netw=192.168 # first two octets, modify as needed but probably not
NIC=eth0 # modify as needed
myIP=$(ifconfig ${NIC}|grep "inet addr"|cut -d: -f2|cut -d" " -f1)
my_netw=$(echo ${myIP}|cut -d. -f1-2)
if [ "${my_netw}" == ${home_netw} ]
then
echo ${domain_EXT_IP}" "${domain} >> /etc/hosts
else
grep "${domain}" /etc/hosts >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
sed -i -e "/${domain}/d" /etc/hosts
fi
fi
/etc/hosts
コンピュータのIPアドレスがホームネットワーク内にあることを検出すると、デフォルトではローカルIPアドレスがファイルに挿入されます。そして、空白の間にこの行を削除すると、ファイルに設定されているすべてのDNSサーバーを使用できます/etc/resolv.conf
。