XMPP 域问题(韵律)

XMPP 域问题(韵律)

我在家庭局域网的树莓派上运行 XMPP 服务器。我注册了一个域来指向我的路由器的外部 IP,并且端口在我的路由器上转发。但是,当连接到 LAN 时,我无法使用外部域/IP,只能在外出时使用。配置家里的计算机以识别服务器是本地(并指向 192.168.xx)还是远程的更简单方法是什么?

答案1

在你的树莓派上设置一个轻量级 DNS 服务器(我建议dnsmasq使用“标准”ISC BIND 服务器,因为它更容易为此目的进行设置)并将其配置为连接到 LAN 的任何设备的默认 DNS 服务器(最有可能的是,在您的 DHCP 配置)。

在 DNS 配置中,将您的域指向本地 192.168.xx 地址,从而覆盖 LAN 内的互联网全局域指针。配置 DNS 以将所有其他查询转发到 LAN 外部的相应 DNS 服务器(例如您的 ISP 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

相关内容