블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

애플에서 제공한 문서 에서 자세한 내용을 확인할 수 있습니다.

<중요> 테스트를 진행하 때는 반드시 로컬 IPv6 네트워크만 활성화 되어 있어야 합니다. 예를 들어 셀룰러 서비스가 켜져 있다면 비활성화 하여 Wi-Fi만으로 테스트가 진행되도록 설정해야 합니다.

환경구성 개요

(1) MAC 컴퓨터 (혹은 노트북)이 Wi-Fi가 아닌 방식으로 인터넷에 연결되어 있는 지 확인하세요.

(2) 시스템 환경 설정을 실행하세요.

(3) Option(Alt) 키를 누른 상태로 공유 메뉴를 실행합니다. 5번 항목까지 **Option(Alt)**키를 누른 채로 유지해 주세요.

![공유 항목 열기] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_2x.png)

(4) 공유 의 서비스 중 인터넷 공유를 선택합니다.

![인터넷 공유 설정] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_2x.png)

(5) Option(Alt) 키에서 손을 뗍니다. (release를 뭐라고 번역해야 하죠????)

(6) 아래 쪽에 보이는 NAT64 네트워크 생성 체크 박스를 선택합니다.

![로컬 IPv6 NAT64 네트워크 활성화] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_ipv6_2x.png)

(7) 연결 공유 콤보박스에서 이더넷을 선택합니다.

랜선으로 연결된 경우 이더넷을 선택합니다.
이외의 경우 자신의 MAC이 인터넷에 연결된 방식을 골라서 선택하시면 됩니다.

![자신의 MAC이 인터넷에 연결된 방식 선택] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_connection_2x.png)

(8) 다음 사용항목에서 Wi-Fi를 선택합니다.

![Wi-Fi 공유 활성화] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_ports_2x.png)

(9) Wi-Fi 옵션... 버튼을 클릭하여 네트워크 이름과 보안 옵션(암호)를 설정합니다.

![Wi-Fi 네트워크 옵션 설정] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_wi-fioptions_button_2x.png)

![Wi-Fi 옵션 설정창] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_wi-fioptions.png)

(10) 인터넷 공유 체크박스를 선택하여 네트워크 공유를 활성화합니다.

![인터넷 공유 활성화] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_sharingenabled_2x.png)

(11) Wi-Fi를 통해 이더넷(랜) 네트워크를 공유하려면 Wi-Fi를 켜야 합니다. 이후 인터넷 공유를 하겠냐는 대화창에서 시작을 누르시면 인터넷 공유가 시작됩니다.

![인터넷 공유 시작] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/systempreferences_sharing_internetsharing_enabledconfirmation.png)

![인터넷 공유가 되고 있는 모습] (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/art/internet_sharing_wi-fi_menu_2x.png)




[출처] https://gist.github.com/stzhyegeun/48a4937b869897f7e7c1f479a74fe3bf

반응형
Posted by blueasa
, |
새해 복 많이 받으세요.
그나저나 애플은 신년 첫날부터 테러 들어갑니다... 작년에 이미 예고한 테러지만요...
뭐냐면... "니네 앱이 IPv6 지원 안하면 리젝될거임 ㅋㅋ"입니다.

거두절미하고, 리젝 안당하려면 이렇게 해야 합니다. 

1. 네트워킹 프레임워크를 사용할 것 
2. IPv4 전용 API를 쓰지 말 것
3. 하드코딩 주소를 쓰지 말 것 




출처: 링크 

각 설명을 들어가 보겠습니다.

----------------

1. 네트워킹 프레임워크를 사용할 것 

iOS SDK 자체에 있는, 소켓 윗단에 구현되어 있는 네트웍 프레임워크라던지, 혹은 제3의 네트워크 프레임워크를 쓰는 것을 권장한다는 뜻입니다. 네트웍 프레임웍을 쓰신다면 위 2는 웬만하면 고려 안하셔도 될 것입니다. 만약 써드파티 네트웍 프레임웍을 쓰시고 있으시면, 해당 프레임웍 개발자에게 이 질문을 꼭 하셔야 하겠습니다. "IPv6 지원하나요?"

네트웍 프레임웍의 일종인 프라우드넷은 IPv6에 대응되어 있습니다. 2015년 12월 업그레이드 릴리즈에서 대응했습니다. 프라우드넷을 쓰시는 분은 IPv6 지원을 원하시면 2015년 12월 업그레이드 혹은 이후 릴리즈를 적용하셔야 합니다. 

----------------

2. IPv4 전용 API를 쓰지 말 것

직접 소켓 프로그래밍을 하신다면, IPv4 전용 API를 쓰시면 안됩니다. 가령 이런 함수들을 쓰시면 안됩니다. (이런 함수들을 쓰는 것 자체가 애플에서 리젝되는지는 확인되지는 않았습니다만, 아무튼 프라우드넷에서는 이들 함수들을 전혀 쓰지 않습니다.)

inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()

IPv6에서 잘 작동하는지 테스트하려면, IPv6 주소만 있는 네트워크 환경을 만들어야 합니다. 여러가지 방법이 있는데요, 저희의 경우 맥 기기를 이용해서 만들었습니다. 

----------------

3. 하드코딩 주소를 쓰지 말 것 

애플에서는 '하드코드 주소'라고 표현했는데요, 이는 대중들에게 쉽게 의미를 전달하려고 일부러 저렇게 표현한 것 같습니다. 
정확한 명칭은 IP literal입니다. 가령, "11.22.33.44"입니다.

한편 우리가 흔히 말하는 '호스트 네임' 가령 "server1.mygame.com" 같은 것은 FQDN(fully qualified domain name)이라고 부릅니다.

만약 하드코드 주소 즉 IP literal을 직접 이용해서 서버에 접속하면 어떻게 되냐고요? 일부 IPv6 네트워크의 클라이언트가 IPv4 네트워크의 서버에 접속을 못하는 경우가 발생할 수 있습니다. (iOS 9.2 이후부터는 이 문제가 일부 해결되긴 합니다만 이 또한 모든 IPv6 네트워크에서 된다는 보장도 없습니다.)

이 반대도 마찬가지입니다. 클라이언트는 IPv4인데 서버가 IPv6인 경우요.

접속을 왜 못하는지는, NAT64/DNS64의 작동 얼개로 설명됩니다. 내용이 길기 때문에 일단 논외 하겠습니다.

그럼 어떻게 해야 하느냐? 애플이 지령(?)한대로 따라야 합니다. 서버는 IPv4 literal 대신 FQDN으로 접근 가능해야 합니다. 클라이언트는 서버에 접속할 때 FQDN을 써야 하고요.

위 내용을 예로 들어 설명하자면, 

- 11.22.33.44 ==> 애플에서 밴 먹임
- server.mygame.com ==> Ok
- 11:22:33:44:55:66:77:88 ==> 애플에서 밴 먹임





서버 세팅을 하시는 분들은, 각 서버에 대한 DNS 세팅을 모두 해주어서 각 서버가 FQDN을 가지게 해주어야 하죠. 그리고 클라이언트는 각 서버에의 접속을 할 때 IP literal이 아니라 FQDN으로 서버에 접속을 해야 하겠죠.

만약 각 서버에 대해 지금 당장 FQDN을 배정하기 힘들 때를 위해, 프라우드넷에는 응급처치 방법을 제공합니다.

프라우드넷 기반 서버에 접속하는 IP literal을 입력하되, IPv4에 물려있는 다른 서버 X의 FQDN도 추가로 입력하면 됩니다. X는 실제로 접속은 안하니 걱정 마시고요, 그저 DNS 검색 대상만 될 뿐입니다. 이것이 있으면, 100% 보장하지는 않습니다만, [1] IPv4 literal만 갖고도 서버에 접속을 할 수 있습니다. 

CNetClient* nc = CNetClient::Create();
p.m_serverIP = "11.22.33.44";
p.m_publicDomainName1 = "www.nettention.com";
p.m_publicDomainName2 = "www.nts.go.kr"; // 네 그렇습니다. 국세청입니다. -_-;;;
nc->Connect(p);

(C#도 가능하나 일단 생략)

어떻게 IPv4 literal만 갖고 접속을 할 수 있냐면... NAT64의 '주소조합 알고리즘'을 구현했기 때문입니다. 이 또한 내용이 기므로 일단은 생략 ^^

아무튼 위 API를 쓰는 것은 어디까지나 응급처치 방법입니다. 완전한 해결을 하려면 애플의 지시(?) 사항 "FQDN으로 서버에 접속해라"를 따라 주어야 합니다.

---------------------

논외: IPv6 주소가 쫙 퍼지면 인터넷 공유기는 사라지지 않을까?

IPv6 주소가 쫙 퍼지면 인터넷 공유기는 "이론상으로" 사라져도 됩니다. 인터넷 공유기 자체가 모자란 인터넷 주소 갯수를 해결하기 위한 방법 중 하나니까요. 

그러나, IP 주소당 가격을 매기는 인터넷 상품을 파는 업체가 IPv6라 하더라도 IP 주소를호락호락 추가 비용 없이 뿌리지는 않을 것입니다. 그렇다면 얄짤없이 인터넷 공유기를 갖다 붙이는 노력을 안할래야 안할 수 없죠. 인터넷 공유기에 강한 프라우드넷도 IPv6 세상에서 여전히 존재 필요성이 있을 것입니다.

-----------------------

즐코딩 하세요~

-------------------

[1]: 맥 기기를 포함해서 일부 클라이언트 사이드 IPv6 인터넷 공유기에서는 정상 작동합니다.



출처 : http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&no=458&z=4

반응형
Posted by blueasa
, |