HTTP Request를 보낼 때 IPv6를 쓸지 IPv4를 쓸지 선택할 수가 있나요?

알림
|
X

페이지 정보

작성자 no_profile 무롱 218.♡.102.105
작성일 2024.06.28 20:00
379 조회
0 추천
글쓰기

본문

클라이언트에서 발생하는 특정 이벤트들을 서버 단에서 수집하는데, 이게 동일 클라이언트인지 확인하기 위해서 쿠키나 IP 등 여러 정보들을 조합해서 확인을 하고 있습니다.


IP의 경우 POST 요청의 헤더에 있는 값을 참조합니다.

var ip = req.headers['x-forwarded-for'];
레딧이나 여러 사이트를 보니 이게 사실상 표준으로 최초 요청을 보내는 클라이언트의 IP를 담는 값이라고 하더라구요.

그런데, 가끔 IPv6 형식의 IP들이 섞여져 들어옵니다. 이런 변수는 생각하지 못했는데, 당황스럽더라구요. 왜냐하면 사이트의 다른 특정 함수에서는 또 같은 클라이언트에서 IPv4 주소를 수집하기 때문에 같은 클라이언트를 다른 방문자로 인식할 수가 있습니다.

대부분은 핸드폰인 것 같던데, 제가 테스트를 해 봤습니다. LTE나 5G로 접속하면 IPv6 주소를 받더라고요. 그런데, IPv6 주소를 받으면, 무조건 IPv6 주소만 사용하는가? 그것도 아닙니다. IPv6 주소를 받아도 IPv4 주소도 같이 가지고 있습니다. 그냥 병행해서 사용할 수 있더군요. 제 사이트에 접속해서 이벤트를 발생시키면 IPv6 주소로 로깅되는 기기에서, 네이버에 접속해서 "내 아이피"를 검색하면 또 IPv4의 IP 주소가 노출됩니다.

그렇다는 건, 클라이언트 쪽에서 원하는 쪽으로 선택해서 HTTP 요청을 보낼 수 있다는 걸로 저는 이해를 했습니다.

클라이언트 쪽 코드는 이렇습니다.

var xhr = new XMLHttpRequest();
xhr.open("POST", URL, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = function() {
if (xhr.status === 200) {
console.log("API 전송 성공");
} else {
console.error("API 전송 중 오류 발생", xhr.statusText);
}
};
xhr.onerror = function(error) {
console.error("API 전송 중 네트워크 에러 발생:", error);
};

코드 자체에는 문제가 없고, 이것도 다른 사이트에서 많이 쓰는 코드인데 요즘 IPv6 쓰는 환경이 많아져서 이런 문제가 생기는 것 같습니다… ㅠ

클라이언트 쪽에서 요청을 보낼 때 애초에 IPv6가 아닌 IPv4로 요청을 보내게 코드를 수정하는 게 가능할까요? 브라우저에서 애초에 IPv6를 우선해서 하는 것이 이상하긴 하네요. 왜 그렇게 만들었는지..
댓글 7 / 1 페이지

자근자근님의 댓글

작성자 자근자근 (211.♡.37.14)
작성일 06.28 21:04
IPv6 가 가능하면 우선할겁니다. 그게 되는 상황이 거의 없어서 그렇죠...
자바스크립트 단에선 요청을 보낼 때 제어할 수 없는걸로 알고 있습니다.

x-forwarded-for 는 최초 요청 IP 는 아니구요... 리버스 프록시를 타고 온 IP 가 순서대로 붙는데,,, 중간 프록시가 모두 검증된 장비가 아니라면 이 값을 신뢰하시면 안됩니다.
앞단에 LB 장비가 붙어있거나 웹서버를 직접 띄우신 거라면 마지막에 붙은 IP 는 신뢰할 수 있겠죠?
다만 그동안 패킷의 ip 를 잘 사용하셨다면 앞단에 무롱님이 관리하시는 프록시가 붙은건 아니니 사용하시면 안되겠네요.

여튼 서버 쪽에서 ipv6 를 지원안하시는게 빠를겁니다ㅎ

무롱님의 댓글의 댓글

대댓글 작성자 no_profile 무롱 (218.♡.102.105)
작성일 06.28 21:14
@자근자근님에게 답글 차라리 웹페이지(클라이언트) 쪽에서 HTML 코드로 IP를 쿠키에 박도록 코딩하는 게 나을 수도 있겠네요.. GCP에서 IPV4만 지원하도록 하려면 또 서비스를 바꿔야 해서.. ㅠ

아이폰점보님의 댓글의 댓글

대댓글 작성자 아이폰점보 (210.♡.239.38)
작성일 06.28 21:40
@무롱님에게 답글 ip를 박아널는 것은 여러모로 악수입니다. 위에 @자근자근자님 말씀처럼 서버 설정에서 ipv6를 꺼버리는게 나아요. ipv6만 지원하는 클라이언트는 일반적이지 않습니다

몽몽님의 댓글

작성자 몽몽 (172.♡.52.231)
작성일 06.28 22:58
이동통신망에 따라 다르겠지만 그 v4 주소도 v6/v4 변환주소로 v6로 변환해서 실제로는 v6로 나갔다가 v6/v4로 망에서 변경해서 v4 통신을 할수 있습니다
애초부터 v4냐 v6 냐의 제일 중요한건 name resolve (DNS)결과가 v4 냐 v6냐 둘다냐 이고 둘다 일때만 설정으로 선호하는 주소로 나가는게 일반적일 것입니다 (물론 조금 다를수도 있습니다)

clien11님의 댓글

작성자 no_profile clien11 (211.♡.127.212)
작성일 06.29 00:29
서버 내부에 reverse proxy를 사용하지 않으시거나 이 정보를 수집하는 곳이 에지라면  x-forwarded-for 대신 그냥 네트워크 ip를 받으시면 될 듯 합니다. 이는 아주 오래전 인터넷망이 느릴 때 forward proxy를 사용할 때 필요한 것인데, 지금은 사용하는 곳이 없고 오히려 이를 쉽게 위조할 수 있는 기회를 줄 뿐이기에 사실상 x-forwarded-for가 의미가 없습니다.
장비의 에지가 AAAA Record가 없다면 즉 ipv4 only라면 이제 모두 ipv4만 받게 되실겁니다.

ccsw님의 댓글

작성자 no_profile ccsw (117.♡.24.138)
작성일 06.29 06:49
근본적으로 ip가 동일 클라이언트 찾는데 도움이 안 되지 않을까요. 굳이 하자면 말씀하신 쿠키나 로컬 스토리지를 활용하는게 더 좋지 않을까요?

catzlog님의 댓글

작성자 catzlog (217.♡.196.43)
작성일 06.29 11:49
투표위젯만들었을때 쿠키를 사용했었습니다. 대학타운이어서 같은 아이피에 다른 학생들이 들어오기도 하고 모바일일 경우 수시로 아이피랑 위치가 바뀌어서 결국 쿠키를 쓰고 결정했던 것으로 기억합니다.
글쓰기
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색