2cpu Q&A 내용 살펴보다가 SyncThing이라는 것을 알게 되었습니다.
RSync랑 비슷하겠지.. 하고 살펴보는데, 지금까지는 참 좋은 툴 같습니다.
아주 마음에 듭니다.
소개해 주신 여러분들, 고맙습니다.
궁금한 것은, 이넘들이 서로를 찾아가는 원리입니다.
일반적으로는 사용하는 포트 같은 것을 방화벽에서 열어주거나 해서 서로 통신하게 해야 할 것입니다.
그런데 SyncThing은 설치하고, 상대방 IP주소 같은 것을 묻지 않습니다.
그저 상대방 ID만을 입력하기만 하면 됩니다.
이게 참 신기합니다. 상대방 ID값만 넣어주면, 서로 어떻게 찾아가는 것이죠?
상대방 ID값만 넣어주면.. 그 ID값에 어떤 값들이 숨어있는 것인지..
신기하게 자기들끼리 알아서 연결하고 그렇습니다.
이것이 P2P기반이라서 그렇다는 설명은 봤는데..
논리적으로 서로를 어떻게 찾는 것인지.. 경유 서버도 없는 것으로 알고 있는데..
그것이 무척 궁금합니다.
또, 경유 서버도 없이, 서로 어떻게 데이터를 주고 받는지도 신기합니다. 방화벽에서 풀어준 것도 없거든요.
지금 테스트로 다른 회사에 SyncThing 설치하고, 저희 회사에 SyncThing설치한 다음.. 데이터 끌어오기 하고 있습니다.
그런데 전혀 문제 없이 데이터를 끌어오고 있네요. 방화벽 설정을 바꾼 것이 없는데 말이죠.
경유 서버가 있다면, A 호스트에서 경유 서버로, B 호스트에서 경유서버로 접속하면 방화벽 없이도 어떻게 될 것 같다고 생각은 합니다만..
지금 이것은 경유 서버도 없는데, 방화벽 오픈 없이 데이터를 주고 받을 수 있네요.
정말 신기합니다.
이 원리에 대해서 아는 분 계신가요?
(참고로 '다른 회사'는 제가 관리하는 회사입니다. (정확히는 제 친구네 회사에요). 제가 테스트 목적을 밝히고, 임시 가상머신 하나 만들어서 하는 것이니, 너무 염려하지 않으셔도 됩니다.)
방화벽은 UPnP이고 디바이스 아이디랑 글로벌 서버랑 자세하게 나와있네요.
https://docs.syncthing.net/users/firewall.html
https://docs.syncthing.net/dev/device-ids.html
미처 이생각은 못해 봤네요~
Local network의 경우 브로드케스팅으로 discover를 하지만 Global discover는 서버가 필요합니다.
https://github.com/syncthing/syncthing/blob/master/lib/config/config.go
그리고 NAT환경에서 홀펀칭을 하기위해 stun도 사용하며 이 또한 외부 서버의 도움을 받습니다.
ㅠ.ㅠ
제가 더 공부해 봐야 할 것 같아요.. ^^
한마디로 서로를 찾아줄 수 있는 서버가 공개적으로 존재합니다.