먼저: 어떤 주소가 바뀌었나요?
“IP가 바뀌었다”는 말은 두 가지를 가리킵니다.
사설 IP는 공유기가 노트북이나 휴대폰에 주는 주소입니다. 192.168.x.x, 10.x.x.x, 172.16.x.x~172.31.x.x 같은 주소이고, 공유기의 DHCP가 다른 주소를 내주면 바뀝니다. 집 밖에서는 아무도 이 주소를 보지 못합니다. 집에서 프린터나 포트포워딩 규칙이 갑자기 안 된다면 대개 이 주소가 바뀐 것이고, 공유기에서 DHCP 고정 할당(예약)을 걸면 해결됩니다.
공인 IP는 웹사이트, 게임 서버, “새 기기에서 로그인했습니다” 메일이 보는 주소입니다. ISP(또는 트래픽이 거쳐 나가는 VPN, 릴레이, 이동통신사)의 주소이고, 내가 정할 수 없습니다. 이 글은 이 주소에 대한 이야기입니다.
IP 확인을 열거나 터미널에서 확인할 수 있습니다.
curl -4 https://api.ipify.org; echo # 공인 IPv4
curl -6 https://api64.ipify.org; echo # 공인 IPv6 (있다면)
dig +short TXT o-o.myaddr.l.google.com @ns1.google.com # 같은 확인을 DNS로
바로 걸러 낼 것이 하나 있습니다. 회선에 IPv4와 IPv6가 둘 다 있으면, 사이트는 브라우저가 그 연결에 쓴 쪽 하나만 봅니다. 브라우저는 연결마다 둘 중 하나를 고릅니다. 그래서 한 번은 203.0.113.45, 다음 번엔 2001:db8:4f2a::1c가 보였다면 바뀐 것이 아닙니다. IP 확인도 이번 연결에 쓰인 주소 하나만 보여 주므로, IPv4는 IPv4끼리 비교하세요.
추측하기 전에 ASN부터 보세요
원인을 가장 빨리 가르는 방법은 이전과 지금의 두 값을 비교하는 것입니다. 주소, 그리고 ASN(그 주소를 가진 네트워크의 번호, ISP 이름 옆에 표시됨)입니다.
| 바뀐 것 | 가장 유력한 이유 |
|---|---|
| 주소만 바뀌고 ASN·ISP 이름은 같음 | ISP가 새 주소를 줌: 임대 만료, 재접속, CGNAT 풀, IPv6 임시 주소 교체 |
| ASN·ISP 이름도 바뀜 | 트래픽이 다른 네트워크로 나감: VPN, iCloud 비공개 릴레이, 모바일 데이터, 회사·게스트 와이파이 |
| 도시만 바뀜 | 아무 일 없을 수도 있음. IP 위치는 추정값이고, ISP의 지역 거점으로 나오는 경우가 많으며 DB도 수시로 갱신됨 |
일부러 네트워크를 바꾸지 않았는데 ASN이 바뀌었다면 VPN 앱, 백신의 ‘안전 브라우징’ 기능, 브라우저 확장, 업데이트 후 켜진 비공개 릴레이를 찾아보세요.
ISP는 그대로인데 주소만 바뀐 경우
동적 임대(DHCP)
케이블·광랜 회선 대부분은 공인 IPv4를 DHCP로 받습니다. 집 안에서 공유기가 쓰는 그 프로토콜을 ISP가 돌리는 것입니다. 주소에는 임대 기간이 붙고, 공유기가 계속 켜져 있으면서 갱신하는 동안은 보통 몇 주, 몇 달씩 같은 주소를 유지합니다.
갱신이 끊길 때 새 주소를 받습니다.
- 공유기나 모뎀이 임대가 끝날 만큼 오래 꺼져 있었을 때(정전, 장기 외출)
- 공유기를 바꿔서 ISP가 다른 하드웨어(MAC) 주소를 새 장비로 볼 때
- ISP가 장비 점검, 지역 주소 재배치, 장비 이전을 했을 때
“정전 후에 바뀌었다”, “공유기를 새로 사니 바뀌었다”가 가장 흔한 이유이고, 반대로 그냥 재부팅해서는 주소가 안 바뀌는 경우가 많은 것도 이 때문입니다.
PPPoE 세션
DSL과 일부 광회선은 PPPoE를 씁니다. 공유기가 아이디·비밀번호로 접속하고 그 세션 동안 주소를 받습니다. 세션이 새로 열릴 때마다 주소가 바뀔 수 있어서, DHCP보다 재부팅이나 회선 끊김으로 주소가 바뀌기 훨씬 쉽습니다. 일부 ISP는 24시간마다처럼 정해진 주기로 세션을 끊기 때문에, 아무도 건드리지 않아도 매일 바뀝니다. 공유기 로그나 WAN 상태 화면에서 PPPoE 재접속 기록을 볼 수 있습니다.
CGNAT: 나만의 공인 IP가 없는 경우
많은 ISP와 사실상 모든 이동통신사는 고객마다 공인 IPv4를 주지 않습니다. 공유기는 ISP 내부망 주소를 받고, 통신사급 NAT(CGNAT)가 여러 고객을 공용 공인 주소 풀로 변환합니다.
확인 방법: 공유기 상태 화면에서 WAN(인터넷) 주소를 보고, IP 확인에 나온 주소와 비교합니다.
- WAN 주소 = 공인 IP: 내 주소가 따로 있습니다.
- WAN 주소가
100.64.0.0/10(즉100.64.x.x~100.127.x.x): 바로 이 용도로 예약된 대역입니다(RFC 6598). CGNAT 뒤에 있습니다. - WAN 주소가
10.x,172.16~31.x,192.168.x: 앞에 NAT가 하나 더 있습니다. 사설 대역을 쓰는 CGNAT이거나, 라우터 모드로 동작하는 ISP 모뎀(이중 NAT)입니다.
traceroute도 힌트가 됩니다. 공유기 바로 다음 홉이 100.64~127.x.x라면 CGNAT일 가능성이 큽니다. 다만 ISP 내부 라우터에 이 대역을 쓰는 곳도 있어 확정은 아닙니다.
traceroute -n 1.1.1.1 # Linux/macOS
tracert -d 1.1.1.1 # Windows
CGNAT에서는 밖에서 보이는 주소를 ISP의 NAT가 고릅니다. 매핑이 시간 초과로 사라지거나, ISP가 풀을 재조정하거나, 재접속하면 바뀔 수 있습니다. 다른 고객과 주소를 같이 쓰기 때문에 남 때문에 CAPTCHA나 차단을 당하기도 합니다. 그리고 포트포워딩이나 DDNS를 아무리 설정해도 집 서버에 밖에서 들어올 수 없습니다. 들어오는 연결이 내 공유기가 아니라 CGNAT에 닿기 때문입니다.
IPv6 임시(privacy) 주소
바뀌는 주소가 2001:db8:4f2a:1100:9c3e:…처럼 생겼다면 의도된 교체일 가능성이 큽니다. 요즘 운영체제는 기기마다 고정 IPv6 주소와 별도로 임시 ‘프라이버시’ 주소를 만듭니다(RFC 8981, 이전 RFC 4941). 밖으로 나가는 연결에는 임시 주소를 쓰고, 운영체제가 이를 주기적으로(대개 하루 정도마다) 새로 만듭니다. 사이트가 주소로 기기를 추적하지 못하게 하려는 것입니다.
직접 볼 수 있습니다.
ip -6 addr show scope global # Linux: "temporary" 표시
ifconfig | grep temporary # macOS
ipconfig # Windows: "임시 IPv6 주소"
보통 그대로인 것은 앞쪽 절반, ISP가 공유기에 위임한 네트워크 프리픽스(흔히 /56이나 /64)입니다. 프리픽스까지 바뀐다면 ISP가 프리픽스를 동적으로 주는 것이고, 동적 IPv4처럼 주로 재접속 때 바뀝니다.
네트워크 자체가 바뀐 경우: 주소와 소유자가 함께 바뀜
모바일 데이터와 네트워크 전환
휴대폰의 공인 IP는 그 순간 어떤 네트워크에 붙어 있느냐에 달려 있습니다. 집 와이파이, 길에서의 모바일 데이터, 회사 네트워크는 서로 다른 ISP이고 주소도 셋 다 다릅니다. 모바일 데이터만 쓰고 있어도 비행기 모드를 껐다 켜거나, 이동하거나, 연결이 끊기면 주소가 바뀔 수 있습니다. 통신사가 휴대폰을 CGNAT 풀 뒤에 두기 때문입니다. 휴대폰에서 “IP가 갑자기 바뀌었다”면 거의 이 경우입니다.
VPN, 릴레이, ‘안전 브라우징’ 기능
다음은 모두 내 공인 주소를 서비스 제공자의 주소로 바꿉니다.
- VPN 앱(백신이나 공유기에 딸려 오는 것 포함)
- 트래픽을 프록시로 보내는 브라우저 기능과 확장
- Apple 기기의 iCloud 비공개 릴레이: Safari 트래픽을 릴레이 두 개를 거쳐 보내고, 세션마다 바뀔 수 있는 출구 주소를 씁니다(Apple이 출구 대역 목록을 공개합니다)
- Cloudflare WARP(1.1.1.1 앱): 출구가 Cloudflare 주소입니다
- 업무용 기기의 회사 VPN과 클라우드 보안 게이트웨이
기능을 끄고 다시 확인하세요. 돌아오는 주소는 ISP가 지금 주는 주소이고, 켜기 전의 주소와 같다는 보장은 없습니다.
바뀌면 문제가 되나요?
웹 서핑에는 문제없습니다. 몇 가지 경우에는 문제가 됩니다.
- 로그인 보안. 일부 사이트는 IP나 추정 위치가 바뀌면 로그아웃시키거나 인증 코드를 요구합니다. CGNAT이나 릴레이 주소는 다른 도시로 보이기도 합니다.
- 허용 목록(allowlist). 협력사 API, 회사 방화벽, 데이터베이스가 내 IP만 받도록 설정돼 있으면 주소가 바뀌는 순간 막힙니다.
- 집에서 호스팅. IP로 접속하는 게임 서버, NAS, 카메라는 주소가 바뀔 때마다 끊깁니다.
- 내 서버. 클라우드 서버의 공인 IP가 바뀌면 도메인 A 레코드는 여전히 예전 주소를 가리키고 방문자는 아무 데도 닿지 못합니다. DNS 조회로 도메인이 지금 어디를 가리키는지 확인하세요.
클라우드 서버는 원인이 다르니 따로 짚습니다. AWS에서 자동 할당된 공인 IPv4는 인스턴스를 중지하면 반납되고, 시작할 때 새 주소를 받습니다. Elastic IP는 유지됩니다. Google Cloud도 임시(ephemeral) 외부 주소는 중지·시작 사이에 바뀔 수 있고, 고정 주소를 예약해야 유지됩니다. 다른 시스템이 IP로 접근하는 서버라면 제공자의 고정 주소를 쓰세요.
주소를 고정하는 방법
ISP 고정 IP. 허용 목록과 호스팅 문제의 유일한 근본 해결책입니다. 보통 기업용 상품이나 유료 부가 서비스입니다. CGNAT 뒤에 있다면 그래도 문의해 보세요. 요청하면 공인 IPv4를 주는 ISP도 있습니다.
DDNS(동적 DNS). 주소를 따라가는 이름만 필요하다면 DDNS 클라이언트를 돌리면 됩니다. 공유기에 내장된 경우가 많습니다. 스크립트로 직접 갱신할 수도 있습니다. Cloudflare API라면 이렇습니다.
IP=$(curl -4 -s https://api.ipify.org)
curl -s -X PATCH \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"content\":\"$IP\",\"ttl\":300}"
cron으로 몇 분마다 돌리고 TTL은 짧게 두세요. 그래야 주소가 바뀐 뒤 리졸버가 예전 주소를 오래 들고 있지 않습니다(TTL 설정 가이드 참고). DDNS는 이름 문제만 풉니다. 허용 목록에는 소용없고, CGNAT 뒤에서도 소용없습니다.
CGNAT 뒤에 있을 때. 공인 IPv4로 들어오는 연결은 내게 닿지 않습니다. 선택지는 이렇습니다. ISP가 IPv6를 준다면 IPv6를 씁니다(기기마다 전 세계에서 닿는 주소가 있고, 공유기의 IPv6 방화벽에서 포트를 엽니다). ISP에 공인 IPv4를 요청합니다. 또는 고정 주소가 있는 곳으로 내가 먼저 연결을 엽니다. 터널 서비스, Tailscale 같은 메시 VPN, 작은 VPS로의 WireGuard 터널이 그런 방법입니다.
협력사가 내 IP를 허용 목록에 넣어야 할 때. 내가 관리하는 주소로 트래픽을 내보내세요. ISP 고정 IP, 고정 주소가 있는 VPS, 주소를 예약한 클라우드 NAT 게이트웨이 중 하나입니다. 그리고 집 회선 주소 대신 그 주소를 알려 주세요.
기록 남기기
ISP에 주소가 얼마나 자주 바뀌는지 보여 줘야 한다면 기록을 남기세요.
# crontab -e
*/10 * * * * echo "$(date -Is) $(curl -4 -s https://api.ipify.org)" >> ~/public-ip.log
이 기록 일주일치와 공유기의 WAN 로그(DHCP 갱신이나 PPPoE 재접속)를 같이 보면 대개 답이 나옵니다. 조용히 갱신되는 임대인지, 매일 강제로 끊기는 세션인지, 이리저리 옮겨 다니는 CGNAT 주소인지. 주소와 함께 ASN까지 바뀐다면 다른 가이드를 보세요: IP가 VPN·프록시로 판정되는 이유.
내 도메인에서 바로 확인
무료, 가입 불필요. 이 가이드가 다루는 항목을 바로 검사하고 조치 방법을 알려드립니다.