본문 바로가기

네트워크/네트워크 좀 더 알아보기-스위치

VLAN(access, trunk, inter-VLAN, SVI 통신)

VLAN


VLAN(Virtual LAN)이란? 말 그대로 가상의 LAN

즉 스위치에서 LAN을 논리적으로 나눈다는 것.

LAN을 나누고 싶은 이유는? 

1. LAN이라는 것은 하나의 IP 대역, 즉 브로드 캐스트 메시지를 전송하면 하나의 LAN에 속한 모든 장비가 메시지를 받는다.

       문제는 이 LAN이 커지면 그만큼 브로드 캐스트를 받는 범위(장비)가 커지는 것.

       만약 LAN에 엄청나게 많은 장비가 속해있다면 각 장비가 하나씩만 브로드캐스트를 발생시킨다고 해도 해당 LAN에 있는 장비들은 엄청난 

       브로드캐스트 메시지를 받느다.

       브로드 캐스트는 없어서는 안될 존재이나, 상당한 부하를 가져오는 것도 사실이다.

       고로 LAN을 나누어서 이 브로드캐스트의 범위를 줄여주려는 목적.


2. 하나의 LAN에 속한다는 것은? 통신이 서로 가능하다는 것.

       그러나 서로 다른 집단이 하나의 LAN에 속한다는 이유로 통신이 가능하다면 이것은 보안 상에 문제가 생길 수 있음.

       이때 가상으로 LAN을 나누어줘서 각자 다른 LAN인 것 처럼 사용하기 위함.


3. 마지막으로 라우팅 장비(라우터 등등)을 통해서만 통신이 가능함 -> 라우터의 여러가지 기술(ACL 등등)을 적용이 가능하다.



스위치 포트의 종류

1. routed port-포트에 IP 할당이 가능

2. vlan tagging port- 특정 프로토콜(IEE802.1q,ISL)을 통해 vlan을 붙이는 것(vlan tagging)이 가능

* vlan을 붙인다는 것은 전송하는 프레임에 vlan 정보를 포함하는 것 정도로 생각하면 된다.

3. vlan untagging port- vlan을 붙이는 것이 불가능



SVI와 VLAN ID


SVI(Switch Virtual Interface)- 스위치 내부 인터페이스를 의미한다. 일반적으로 스위치는 인터페이스에 직접 IP할당이 불가능하다.

    -->따라서 내부 가상 인터페이스인 VLAN에 IP를 할당해준다.

VLAN ID- 기본적으로 스위치는 IP인식이 불가능하다. 따라서 VLAN에 IP를 할당해도 인식이 불가능하다. 

  그렇기때문에 VLAN ID에 따라서 서로 다른 VLAN임을 인식한다.

VLAN ID는 다음과 같이 나누어진다.

0 -> system이 쓰는 vlan(일반적으로 할당이 불가능함)

1(default) -> 기본적으로 모든 스위치의 인터페이스는 vlan 1번에 속한다.

2-1001 -> 우리가 일반적으로 할당해주는 vlan

1002-1005 -> token-ring 방식을 쓸 때 사용하는 vlan(우리는 이더넷 방식을 사용하므로 사용 할 필요가 없다.

1006-4094 -> 확장 vlan

4095 -> 0번과 같이 system이 쓰는 vlan

 


*vlan 구성의 두가지 종류

End-To-End VLANs-기본적으로 물리적 위치를 상관 x, 서로 다른 스위치에 있는 같은 VLAN도 통신 가능, 반면에 같은 스위치에 있어도 다른                          VLAN끼리는 통신이 불가능하다. 물리적 제약이 없으나 모든 스위치가 VLAN 정보를 다 알아야한다.

LOCAL VLANs-같은 switch에 있는 장비를 하나의 VLAN으로 묶어줌. 즉 같은 스위치에 있으면 통신이 가능하나 다른 스위치와 통신 불가능

        물리적 제약의 단점을 가짐.



access port와 trunk port 

access-port -> 특정 vlan에 속하는 포트라 한다.

trunk-port -> 두개의 vlan 이상에 속하는 포트를 trunk port라 함.


해당 설명은  End-to-End VLANs을 설명하면서 진행하겠음.




다음과 같은 망이 있고 목표는 같은 VLAN인 S1-S3, S2-S4가 서로 통신이 가능하게해야한다는 가정 하에 진행한다.

우선 각 인터페이스 f1/0, f1/1은 각각 vlan 10 access-port, vlan 20 access-port로 지정해줘야함.

또한 f1/10, f1/11 인터페이스들은 vlan 10과 20 모두 지나 갈 수 있어야 하니 당연히 trunk-port로 지정해줘야함.


우선 기본적인 정석 vlan access port 지정 방법은 다음과 같음.


ESW1(config)#vlan 10

vlan 10번을 생성함

ESW1(config-vlan)#int f1/0

access-port를 설정할 인터페이스에 들어가서

ESW1(config-if)#switchport mode access
해당 인터페이스를 access-port로 사용하겠다는 명령어와
ESW1(config-if)#switchport access vlan 10
해당 인터페이스를 vlan 10에 할당하겠다는 두개의 명령어를 사용함


그러나 사실 vlan을 따로 생성하지 않아도 vlan을 할당이 가능함

ESW1(config)#int f1/1
ESW1(config-if)#switchport mode access
ESW1(config-if)#switchport access vlan 20
% Access VLAN does not exist. Creating vlan 20

다음과 같이 따로 만들지 않아도 할당하면 vlan 20이 자동으로 생성되는 것을 볼 수 있음
그러면 언제 vlan [vlan ID]를 만들어 vlan을 생성해주는가에 관해 고민할 필요가 있음.

우선 첫번째 경우,
vlan에 옵션을 주고 싶을 때
ESW2(config)#vlan 10
ESW2(config-vlan)#name test-vlan
위와 같이 특정 vlan에 이름과 같은 옵션을 주어 생성하는 경우 vlan [vlan ID] 명령어가 필요함

그리고 두번째,
ESW3 같은 경우
ESW3는 모두 trunk-port임.
trunk-port는 나중에 보면 알겠지만 특정 vlan을 할당해주는 개념이 아닌 모든 vlan이 해당 포트를 지나 갈 수 있게 해주는 개념임.
따라서 vlan을 따로 만들어 할당할 필요가 없음.
그러나 ESW3의 경우 통신을 위해 vlan 10과 vlan 20이 지나가야함.

ESW3(config)#vlan 10
ESW3(config-vlan)#exit
ESW3(config)#vlan 20
ESW3(config-vlan)#exit
따라서 위와 같이 vlan 10과 20을 생성해야줘야함

이제 trunk port 설정법을 알아보겠음.
ESW1(config)#int f1/10
ESW1(config-if)#switchport trunk encapsulation dot1q
trunk-port의 프로토콜은 ISL과 dot1q 두가지가 존재함. 두가지는 약간의 설정 상에 차이가 있음. 여기서는 dot1q를 사용하겠음
ESW1(config-if)#switchport mode trunk
해당 포트를 트렁크 포트로 바꿔주기만 하면 trunk port를 사용이 가능함

S1#ping 1.1.1.3
이제 S3로 핑을 때리면 성공하는 모습을 볼 수 있다.

VLAN trouble shooting

vlan을 트러블 슈팅 할 수 있는 몇가지 명령어가 있다.
우선 가장 기본적으로

ESW1#show int status
해당 명령어는 인터페이스가 어느 vlan에 속하는지 스피드와 듀플렉스가 어떻게 되어있는지 모두를 보여준다.

ESW1#show vlan-switch brief
해당 명령어는 특정 vlan에 어떤 포트가 속해있는지 볼 수 있다.

ESW1#show int trunk
해당 명령어는 trunk port가 어느 포트인지 알려준다.

ESW1#show int switchport
해당 명령어는 모든 인터페이스에 상세 정보를 보여준다.





위의 명령어로 trunk port로 바꿀 시 치명적인 보안 상 약점이 생긴다.
바로 모든 vlan이 trunk-port로 지나 갈 수 있다는 것!!
따라서 특정 vlan만 trunkport를 이용 할 수 있게 허용해줘야한다.

우선 가장 간단한 방법은 아예 vlan을 shutdown 시키는 것이다.

ESW1(config-vlan)#vlan 24
ESW1(config-vlan)#shutdown

그러나 위의 방식은 스위치의 모든 포트에서 vlan 24가 사용이 불가능하다.

만일 특정 포트에서 vlan을 사용이 불가능하게 하고 싶을 시 다음과 같은 명령어를 입력해주면된다.

ESW1(config-if)#int f1/10
특정 인터페이스에 들어가서
ESW1(config-if)#switchport trunk allowed vlan 10,1,1002-1005
다음과 같은 명령어를 입력하면 된다. 해당 명령어는 vlan 10번을 허용하겠다는 명령어이다.
즉 vlan 10번을 제외한 나머지 vlan들은 해당 포트를 사용하지 못한다.
뒤에 있는 숫자 1,  1002-1005는 기본적으로 열어줘야하는 default vlan이다.
실제 cisco 장비에서는 뒤에 숫자를 생략해도 되지만 GNS3 환경 상 뒤에 숫자까지 입력해주자.

vlan은 앞서 언급했듯이, 서로 간 통신이 불가능하다.
서로 통신을 하기 위해서는 라우팅이 필요하다.
vlan이 통신하는 방법으로는 대표적으로 2가지가 있다.
1.inter-vlan
2.SVI 통신

inter-vlan부터 차근차근 알아보도록 하자.

inter-vlan
inter vlan은 라우팅 장비가 vlan을 인식하게하는 방법이다.
각각의 vlan들은 하나의 스위치에 묶여 라우팅 장비로 올라간다. 라우팅 장비는 하나의 인터페이스만 스위치와 연결되어있지만 논리적으로 해당 인터페이스를 나누어 각각의 vlan에 할당하는 방식이다.




위와 같은 토폴로지가 있다고 치자
ESW1을 중심으로 S1과 연결된 f1/2는 vlan 10번을 s2와 연결된 f1/3은 vlan 20을 각각 할당해주었다.
마지막으로 f1/1은 트렁크 포트로 만들어 모든 vlan을 지나 갈 수 있게해준다.
여기서 라우터에서 다음과 같이 설정하면 vlan 10번인 S1과 vlan 20번인 S2가 통신이 가능하다.

R1(config)#int f0/0
우선 특정 인터페이스로 들어가서
R1(config-if)#no sh
활성화 시켜준다
R1(config-if)#int f0/0.10
해당 명령어는 인터페이스 f0/0을 논리적으로 분할시키겠다는 뜻이다.
R1(config-subif)#encapsulation dot1q 10
분할 시킨 f0/0.10인터페이스에 vlan 10번을 dot1q 프로토콜로 할당해준다.
R1(config-subif)#ip add 10.10.10.1 255.255.255.0
f0/0.10에 특정 IP를 준다.
R1(config-subif)#int f0/0.20
역시 f0/0.20이라는 논리적인 인터페이스를 만들어서
R1(config-subif)#encapsulation dot1q 20
vlan 20번에 할당해준다.
R1(config-subif)#ip add 20.20.20.1 255.255.255.0
특정 IP를 준다.

R1#show ip route 

     20.0.0.0/24 is subnetted, 1 subnets
C       20.20.20.0 is directly connected, FastEthernet0/0.20
     10.0.0.0/24 is subnetted, 1 subnets
C       10.10.10.0 is directly connected, FastEthernet0/0.10


라우팅 테이블을 보면 라우터가 20번대 대역과 10번대 대역 둘 다 알고 있다.
이제 S1과 S2의 게이트웨이를 방금 설정한 10.10.10.1과 20.20.20.1로 잡아주기만 하면 S1(vlan 10)과 S2(vlan 20)는 서로 통신이 가능하다.

 

SIV 통신

SVI 통신이란 VLAN에 IP 할당 후 물리적 인터페이스가 아닌 VLAN에 라우팅 프로토콜을 구동시켜 VLAN끼리 통신을 하게하는 방식이며, 
VLAN과 라우팅 둘다 가능한 L3스위치에서 사용하는 방식이다.





우선 각각 ESW의 int f1/0을 vlan 10, 20, 30을 위의 토폴로지에 맞게 할당해준다.

그리고 vlan 10에는 10.10.10.254를, vlan 20에는 20.20.20.254를, vlan 30에는 30.30.30.254를 IP로 할당해준다.

그리고 S1, S2, S3의 게이트웨이를 방금 할당한 vlan 10, 20, 30의 주소로 설정해준다.

해당 작업이 끝났으면 이제 라우팅 프로토콜을 구동시켜주면된다. 여기서는 OSPF를 사용하겠다.


ESW3(config)#int range f1/3 - 4

특정 인터페이스에 들어가서

ESW3(config-if-range)#sw mo acc

ESW3(config-if-range)#sw acc vlan 40

해당 인터페이스에 VLAN 40을 할당해주고

ESW3(config-if-range)#int vlan 40

ESW3(config-if)#ip add 40.40.40.3 255.255.255.0

VLAN 40에는 다음과 같은 IP를 할당해준다.

ESW3(config)#ip routing
라우팅을 사용하겠다는 명령어이다. OSPF를 사용해야하므로 입력해주자.
ESW3(config)#router os 1
ESW3(config-router)#network 30.30.30.254 0.0.0.0 area 0
ESW3(config-router)#network 40.40.40.3 0.0.0.0 area 0
OSPF를 구동하고 모든 연결된 모든 인터페이스를 광고해준다.



위와 같이 ESW1도 vlan 40을 생성 후 IP할당(40.40.40.1/24), 모든 인터페이스를 OSPF로 광고해주고

ESW2도 똑같이 vlan 40을 생성 후 IP 할당(40.40.40.2/24), 모든 인터페이스를 OSPF로 광고해준다.


그러면 S1-S2-S3간 서로 다른 VLAN 이지만 통신이 가능하다.


ESW3#show ip ro
라우팅 테이블 확인 시 다음과 같이 VLAN 할당 정보를 OSPF로 광고 받는 것을 알 수 있다.

Gateway of last resort is not set

     20.0.0.0/24 is subnetted, 1 subnets
O       20.20.20.0 [110/2] via 40.40.40.2, 00:12:24, Vlan40
     40.0.0.0/24 is subnetted, 1 subnets
C       40.40.40.0 is directly connected, Vlan40
     10.0.0.0/24 is subnetted, 1 subnets
O       10.10.10.0 [110/2] via 40.40.40.1, 00:13:57, Vlan40
     30.0.0.0/24 is subnetted, 1 subnets
C       30.30.30.0 is directly connected, Vlan30