저는 집 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
.