:: 이 글은 제 블로그(httP://www.soar.co.kr/blog)에 최종수정본을 올리며 파코즈에 동시에 올리는 글입니다.
:: 경고 합니다.
이 글은 꽤 전문적인 분야에 속하며, 일반인은 그리 자주 접할 기회가 없는 기능입니다.
이 기능을 잘못 건들였을 경우, 최악 인터넷 불능 상황에 처할 가능성이 있으니 주의하시기 바랍니다.
본 글에서 설명하는 기능 중, -p 옵션의 경우 레지스트리가 수정되는 옵션입니다. 주의하시기 바랍니다.
- METRIC이란 무엇인가?
컴퓨터에 다수의 LAN카드, 혹은 다수의 네트워크 연결이 설치되어 있다면
네트워크 등록 정보에는 다수의 LAN 연결이 등록되게 된다.
그렇다면 이러한 경우, 과연 컴퓨터는 어떤 LAN카드로 어떤 데이터를 두고 받는것일까?
METRIC이란, 이러한 LAN 연결의 사용순서를 설정하는, 일종의 우선순위이다.
일반적으로 METRIC의 경우, 아무런 설정도 하지 않으면 자동 메트릭 설정
즉, 윈도우가 자기 꼴리는 연결로 데이터를 주고받는다는 이야기가 된다.
그러면 METRIC으로 우선순위를 결정하면 어떻게 될까?
윈도우는 METRIC이 낮은 LAN 연결을 통하여 인터넷을 하게 된다.
윈도우가 어떤 LAN을 통하여 통신하는지는, 명령 프롬프트에서 route print 명령어를 이용하면 알 수 있다.
그런데 웃기는건, 자동 메트릭 설정을 해둘 경우
도데체 어떤 LAN 연결이 어떤 메트릭을 가지는지 알 방법이 없다.
즉, 윈도우는 지 꼴리는대로 하는데 사용자는 이를 알 방도가 없는것이다.
그리고, 사용자가 정확하게 이건 이걸로, 저건 저걸로! 라고 원하는 게 있다면
직접 설정해보는것도 나쁘지 않을 것이며
이 글에서 이번엔 그걸 다뤄보려 한다.
- METRIC의 설정
기본적으로, 우리는 TCP/IP라는 프로토콜을 이용하여 통신을 한다.
그리고 METRIC은 이 TCP/IP라는 프로토콜이 설치되어 있어야 설정이 가능하며
METRIC
을 설정해도 TCP/IP가 아닌 다른 프로토콜울 이용하여 통신을 할 경우, 이와같은 METRIC설정운 무시되고 해당 프로토콜에서
가지는 독자적인 우선순위 결정방식, 또는 사용하는 응용프로그램의 요구에 따라 바뀔 수 있다.
METRIC의 설정은
네트워크 연결(제어판 -> 네트워크 연결) -> METRIC을 지정할 LAN 연결 -> TCP/IP 속성 -> 고급 -> 인터페이스 메트릭
여기서 자동 메트릭의 체크를 해제하고, 원하는 우선순위를 설정하면 된다.
주의할점은, METRIC을 설정하게 되면 윈도우는 우선순위가 높은 METRIC을 통해서만 통신을 하게 되며
METRIC이 낮은 다른 LAN 연결로는 데이터를 일체 송수신하지 않는다는것이다.
만약, 여러분이 이러한 METRIC설정을 해놓고 LAN 하나가 뒈지면 예비용으로 준비해놓는거야 라는게 아니라면, 사용자가 친히 운영체제에게 이건 이쪽으로, 저건 저쪽으로 라고 가르쳐줘야 할 필요가 있다.
- 이건 이쪽으로, 저건 저쪽으로 (Route 설정)
먼저, Route 설정을 하기 전에 각 Lan 연결의 Metric 설정을 하겠다.
이 글에서 예로 드는 연결은 연결이름 A, 연결이름 B가 있다. (C는 무시하도록 한다.)
연결이름 A는 Metric 1, 연결이름 B는 Metric 2로 설정되어있는것을 기억하도록 하자.
각 연결 포인트의 설정은, 명령 프롬프트(시작 -> 실행 -> cmd)의 route 명령어를 이용한다.
(위에서 잠깐 소개했던 route print 명령어도 route명령의 일부이다.)
여기서 route 명령을 이용하여 설정하는것은, 특정 지정 IP를 이용할때만 유효하며, 그 이외의 모든 경우는 우선순위가 높은 LAN연결을 이용하게 된다.
(ex 123.234.234.234 라는 IP로 연결할때는 B로, 그 이외는 A로 연결하고 싶을 경우)
이러한 route 설정 추가는 복수개의 IP가 허용된다.
이러한 설정의 추가때는 route 명령어에 add명령어를 붙여 사용한다.
route -P add 추가IP mask MASK GATEWAY metric Dec IF Hex(Interface ID)
(-P 옵션에 대해서는 Active Route, Persistent Route에서 설명한다.)
설정없음 : 기본적으로 입력해야 하는 것
밑줄 : 입력해도 되고 하지 않아도 되는 것, 부가적인 옵션이 있다.
기울임꼴 : 반드시 입력해야 하는 명령어
굵게 : 사용자가 정확하게 입력해줘야 하는 값
Dec : 10진수 정수
Hex : 16진수 정수
☆ 위와같은 형식은 아래의 설명에도 자주 등장함으로 가끔 참고하는것이 좋다.
예를들어, A라는 연결은 METRIC 1, B라는 연결은 METRIC 2이며
61.215.212.17 라는 IP와 통신할때는 B 연결로
그 외에는 A연결로 통신을 하고 싶을 경우,
우선은 B 연결의 interface ID와 게이트웨이, Netmask를 알아야 한다.
먼저 Interface ID를 알아보자.
route print 명령어를 입력하면
C:\Documents and Settings\HATA>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...연결이름 C ...... Realtek RTL8139 Family PCI Fast Ethernet NIC -패킷 스케줄러 미니 포트
0x3 ...연결이름 A ...... Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller - 패킷 스케줄러 미니 포트
0x4 ...연결이름 B ...... VPN Client Adapter - VPN-PacketiX VPN - 패킷 스케줄러 미니 포트
===========================================================================
===========================================================================
이러한 형태로 LAN 연결의 ID, 이름, 장치가 표시된다.
여기서, 앞부분의 굵게 표시한 Hex의 형태를 취하는 16진수 정수가 Interface ID이다.
가장 위의 0x1 MS TCP Loopback interface라고 되어있는것은
루프백 인터페이스라는 것으로, 흔히 http://localhost/ 혹은 http://127.0.0.1/이라고 입력했을 때
네트워크 신호가 나갔다가 돌아서(Loop) 들어온다(Back)는 의미이다.
B라는 연결이 0x4의 ID를 가진것을 확인했으니, 이제 게이트웨이와 Netmask를 확인해야 한다.
ipconfig 명령어를 입력하면
C:\Documents and Settings\HATA>ipconfig
Windows IP Configuration
Ethernet adapter 연결이름 C:
Media State . . . . . . . . . . . : Media disconnected
Ethernet adapter 연결이름 B:
Connection-specific DNS Suffix . : public-vpn.softether.com
IP Address. . . . . . . . . . . . : 10.2.127.177
Subnet Mask . . . . . . . . . . . : 255.0.0.0
Default Gateway . . . . . . . . . : 10.0.0.1
Ethernet adapter 연결이름 A:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.100
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
이러한 형태를 취하게된다.
여기서 조금 설명이 들어간다.
Connection-specific DNS Suffix : 만약 DHCP 서비스를 이용하여 IP를 받아오는 경우(유동아이피), 해당 DHCP 서버의 이름이 표시되는 가능성이 높다. (엉뚱한게 표시되기도 한다.)
IP Address : 말그대로 현재 그 연결이 가지고있는 IP를 뜻한다.
Subnet Mask : 조금 전문적인 내용인데다가 햇깔리고, 지금은 당장 필요없는 내용이니 패스하도록 하자.
Default
Gateway : 인터넷이 나가는 통로가 된다. 만약 공유기를 사용한다면 공유기의 IP가, 공유기를 사용하지 않는다면 자신의
IP에서 끝자리가 1인 IP가 될 가능성이 있다.(예를들어 210.210.63.87이 ID일 경우, 게이트웨이는
210.210.63.1 일 가능성이 높다. 꼭 1이 아니라 127, 혹은 254인 경우도 있다.)
그럼 이제 연결 B의 게이트웨이는 10.0.0.1, 넷마스크는 255.0.0.0, Interface ID 는 0x4라는것을 알았다.
그러면 이제, 컴퓨터에게 가르쳐줘야한다.
다시한번 설명하지만, 61.215.212.17 라는 IP와 연결할때는 B연결을 통하여 통신하도록 설정할것이며
B라는 연결은 0x4의 16진수 Interface ID를 가지고 있고, 10.0.0.1이라는 게이트웨이 주소를, 255.0.0.0이라는 netmask 주소를 가지고 있으며, metric은 2로 설정했던것을 기억할 것이다..
route add 61.215.212.17 mask 255.0.0.0 10.0.0.1 metric 2 IF 0x4
정상적으로 등록되었으면, 아무런 메시지도 뜨지 않고 프롬프트가 뜬다.
C:\Documents and Settings\HATA>route add 61.215.212.17 mask 255.0.0.0 10.0.0.1 metric 2 IF 0x4
C:\Documents and Settings\HATA>
하지만, 가끔씩 아래와 같은 에러를 뿜으며 등록되지 않을때가 있다.
The route addition failed: The specified mask parameter is invalid. (Destination & Mask) != Destination.
이 경우는, 위에서 입력한 mask가 틀렸을 경우 발생한다.
하지만, 우리는 분명히 ipconfig에서 Mask가 255.0.0.0 임을 확인하였다.
그렇다면 왜 이러한 에러가 발생하는가?
위의 경우는, VPN 등의 연결을 위해 LAN장비 없이 논리적으로만 LAN 연결이 정의되어 있을 경우 자주 발생하는 문제이다.
지정되어있는 넷마스크는 255.0.0.0 이나, 실질적으로 데이터 통신에 이용되는 넷마스크가 255.0.0.0이 아니기 때문에 발생한다.
따라서, 해당 문제는 실질적으로 어떠한 넷마스크를 이용하는지 밝혀내야 해결이 가능한데
이것은 route print 명령을 이용하여 알 수 있다.
위에서, 연결 B가 metric이 2로 설정되어있었던것을 기억할것이다.
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
10.2.127.177 255.255.255.255 127.0.0.1 127.0.0.1 2
10.255.255.255 255.255.255.255 10.2.127.177 10.2.127.177 2
130.158.6.92 255.255.255.255 192.168.1.1 192.168.1.100 1
Default Gateway: 192.168.1.1
===========================================================================
몇줄 뽑아보았다.
쉽게 설명하자면
먼저, 위의 각 줄은 각각 하나의 Route라고 한다.
Network Destination : 통신 대상 컴퓨터(혹은 그에 준하는 네트워크 장치)의 IP
Netmask : 이용하는 넷마스크 IP
Gateway : 이용하는 게이트웨이
Interface : Network Destination의 대상과 통신하는 IP
Metric : 해당 Active Route의 우선순위
여기서 255.0.0.0으로 입력했을때 넷마스크가 틀리다며 에러가 나온 이유를 알 수 있다.
Metric 2로 설정한 연결 B의 Netmask가 255.255.255.255로 되어있는것을 볼 수 있다.
route add 61.215.212.17 mask 255.255.255.255 10.0.0.1 metric 2 IF 0x4
이제 이렇게 입력하면 문제없이 정상적으로 입력이 된다.
만약, Interface ID를 입력하지 않은 경우에는 게이트웨이가 같은 LAN 연결을 찾아 그쪽으로 자동 연결한다.
이런식으로 Metric와 Route 설정을 수동으로 해주면, 보다 효율적인 네트워크의 활용이 가능해진다.
(예를들어 일본 온라인게임을 하면서 한국 홈페이지는 전혀 끊기지 않으면서 게임을 한다거나 ㅡ.ㅡ;;)
설정한 Route를 제거할때는
route delete 추가했던IP
명령을 이용하면 된다.
- Active Route, Persistent Route
그런데 여기서 문제가 한가지 발생한다.
컴퓨터를 종료하고 켜거나, LAN 연결을 초기화할때마다 설정했던 Route가 사라져버리는 것이다.
일반적으로 TCP/IP 프로토콜의 경우, LAN연결이 활성화되면 함깨 초기화되며 동작을 시작한다.
LAN연결의 활성화는, 윈도우의 부팅중에 시행된다.
윈도우에서 TCP/IP의 초기화는 레지스트리의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip 를 참조하여 초기화하도록 되어있다.
우리가 설정했던 Route 설정은 어디까지나 '임시적인 것'으로서, 초기화가 되고 동작중인 TCP/IP 프로토콜에 어거지로 끼워넣은것과 같은 것이다.
초기화시 같이 초기화되어 설정값이 저장되게 하기 위해서는, 위에서 잠깐 언급했던 -p 옵션이 필요하다.
route -P add 추가IP mask MASK GATEWAY metric Dec IF Hex(Interface ID)
위 보기와 같이 -P 옵션을 추가할 경우, 해당 값은 레지스트리의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes 경로에 대상IP,넷마스크,게이트웨이,METRIC의 순서대로 문자열값으로 저장되어있다.
자, 그러면 위에서 예로 들었던 61.215.212.17 IP를 가지고 예를 들어보도록 하자
route -P add 61.215.212.17 mask 255.255.255.255 10.0.0.1 metric 2 IF 0x4
이번엔 -P 옵션을 붙였다.
그러면 위의 레지스트리 경로에 61.215.212.17,255.255.255.255,10.0.0.1,2라는 값으로 저장되어 있을것이다.
이제 다시 cmd로 돌아가서, route print 명령을 쳐보자.
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
61.215.212.17 255.255.255.255 10.0.0.1 10.2.127.177 2
Default Gateway: 192.168.1.1
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
61.215.212.17 255.255.255.255 10.0.0.1 2
또다시 몇줄만 뽑아보았다.(...)
-p옵션을 사용하여 등록하자, Active Routes 뿐만 아니라, Persistent Routes에도 추가되는것을 볼 수 있다.
Persistent Routes는 TCP/IP 프로토콜 초기화시 함깨 초기화되어 Route로 등록되도록 예약되어있는 Route들을 말한다. 즉, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes경로에 등록되어 있는 Route들이 Presistent Routes에 표시되는것이다.
글 수정사항
2008/10/25 15:40
경고문이 추가되었으며, 각 Lan연결의 Metric 설정 부분이 추가되었습니다.
알려주신 두현님 감사합니다.