DHCP (Dynamic Host Configuration Protocol) 서버 구성 및 작동 과정
DHCP는 네트워크에서 동적으로 IP 주소를 할당하는 프로토콜입니다. 클라이언트는 네트워크에 연결될 때 DHCP 서버로부터 IP 주소를 자동으로 받으며, 서버는 DHCP Binding Table에 각 클라이언트의 IP 주소, MAC 주소, 임대 기간을 저장합니다.
DHCP 작동 과정 (클라이언트와 서버 간의 상호작용):
- Discover: 클라이언트가 네트워크에 연결되면, DHCP 서버를 찾기 위해 DHCP Discover 메시지를 브로드캐스트합니다.
- Offer: 서버는 DHCP Discover를 수신하고, 클라이언트에게 IP 주소를 제안하는 Offer 메시지를 보냅니다.
- Request: 클라이언트는 받은 Offer 중에서 선택한 IP를 요청하는 Request 메시지를 서버로 보냅니다.
- ACK: 서버는 클라이언트의 요청을 승인하고, ACK(Acknowledgment) 메시지를 보내어 IP 주소를 할당합니다.
Gratuitous ARP:
- 클라이언트는 받은 IP 주소가 다른 장치에서 이미 사용 중인지 확인하기 위해 Gratuitous ARP를 브로드캐스트합니다.
- 응답이 없다면 해당 IP 주소는 유니크한 주소로 간주되고, 사용할 수 있게 됩니다.
R1에서 HEADQUARTER 네트워크용 DHCP 서버 구성
서버에서 DHCP를 구성할 때 **IP 주소 범위(excluded-address)**와 **IP 주소 풀(pool)**을 설정합니다. 예시로 R1에서 HQ 네트워크에 대해 DHCP를 설정한 부분입니다:
R1(config)# ip dhcp excluded-address 172.16.101.1 172.16.101.99
R1(config)# ip dhcp pool HQ
R1(dhcp-config)# network 172.16.101.0 /24
R1(dhcp-config)# dns 8.8.8.8
R1(dhcp-config)# default-router 172.16.101.1
R1(dhcp-config)# lease 0 5
R1(dhcp-config)# exit
위 명령에서:
- excluded-address는 클라이언트에게 할당되지 않도록 제외된 IP 주소 범위를 지정합니다.
- dhcp pool은 DHCP 주소 풀의 이름을 설정합니다.
- network는 할당할 IP 주소 범위를 정의합니다.
- dns는 클라이언트가 사용할 DNS 서버를 지정합니다.
- default-router는 클라이언트에게 제공할 기본 게이트웨이 IP입니다.
- lease는 IP 주소의 임대 기간을 설정합니다.
R1에서 BRANCH 네트워크용 DHCP 서버 구성
BRANCH 네트워크를 위해 DHCP 서버를 설정하려면, 클라이언트들이 172.16.102.201에서 시작하는 IP를 할당받을 수 있도록 설정해야 합니다.
R1(config)# ip dhcp excluded-address 172.16.102.1 172.16.102.200
R1(config)# ip dhcp pool BR
R1(dhcp-config)# network 172.16.102.0 /24
R1(dhcp-config)# default-router 172.16.102.1
R1(dhcp-config)# dns 8.8.8.8
R1(dhcp-config)# lease 0 3
R1(dhcp-config)# exit
위 명령에서:
- excluded-address는 172.16.102.1부터 172.16.102.200까지의 IP 범위는 제외하고, 나머지 IP를 클라이언트에게 할당하도록 설정합니다.
- dhcp pool BR은 DHCP 풀의 이름을 BR로 설정합니다.
- network는 172.16.102.0/24 네트워크 범위를 사용하도록 설정합니다.
- default-router는 클라이언트에게 제공할 기본 게이트웨이 주소를 172.16.102.1로 설정합니다.
- dns는 클라이언트가 사용할 DNS 서버를 8.8.8.8로 설정합니다.
- lease는 IP 주소의 임대 기간을 3분으로 설정합니다.
DHCP Discover 메시지가 Offer 메시지를 받지 못하는 경우
클라이언트(예: PC3)가 DHCP 서버를 찾기 위해 DHCP Discover 메시지를 브로드캐스트하면, 해당 메시지는 같은 서브넷에 있는 서버만 수신합니다. 만약 서버가 동일한 네트워크에 없다면, 클라이언트는 Offer 메시지를 받지 못합니다.
- 위와 같은 경우, 클라이언트는 DHCP Discover 메시지를 브로드캐스트하여 서버를 찾습니다.
- 서버가 동일 네트워크에 있지 않으면 클라이언트는 Offer를 받지 못하고, DHCP 할당을 완료할 수 없습니다.
해결 방법: DHCP Relay Agent 설정: ip helper-address 명령어
DHCP Relay Agent는 다른 서브넷에 있는 DHCP 서버와 클라이언트 간에 DHCP 요청을 중계하는 역할을 합니다. 클라이언트가 다른 서브넷에 있고, DHCP 서버가 같은 네트워크에 없다면, DHCP Discover 메시지가 서버에 도달하지 않기 때문에 이를 중계해주는 장치가 필요합니다. 이때 ip helper-address 명령어를 사용하여 DHCP Discover 메시지를 특정 서버로 전달할 수 있습니다.
R2(config)# int f0/1
R2(config-if)# ip helper-address 10.10.10.1
위 명령에서:
- int f0/1: FastEthernet 0/1 인터페이스로 들어가서 설정을 시작합니다.
- ip helper-address: DHCP Discover 메시지를 전달할 서버의 주소를 설정하는 명령어입니다. 여기서는 10.10.10.1 주소가 DHCP 서버로 지정되었습니다.
- 10.10.10.1: 이 IP 주소는 DHCP 서버의 주소입니다. 즉, R2 라우터가 FastEthernet 0/1 인터페이스에서 받은 DHCP Discover 메시지를 10.10.10.1 서버로 전달하게 됩니다.
설명
- DHCP Relay Agent: 클라이언트가 다른 서브넷에 있을 때, DHCP 서버가 클라이언트의 DHCP Discover 메시지를 수신할 수 없기 때문에, 이 메시지를 중계해주는 역할을 합니다.
- *ip helper-address*는 라우터가 DHCP Discover 메시지를 수신하여 지정된 DHCP 서버로 전달하도록 설정합니다.
- 이 명령어를 통해 R2 라우터의 f0/1 인터페이스에서 수신한 DHCP Discover 메시지를 10.10.10.1에 있는 DHCP 서버로 전달하고, 서버는 클라이언트에게 IP 주소를 할당할 수 있습니다.
중계 역할
- 클라이언트가 다른 서브넷에 있을 때, 클라이언트의 DHCP Discover 메시지를 R2 라우터가 받아서 10.10.10.1 주소로 전달합니다.
- 이 후, DHCP 서버는 DHCP Offer 메시지를 R2 라우터에 전달하고, R2 라우터는 이 메시지를 클라이언트에게 전달하여 IP 주소를 할당하게 됩니다.
서로 다른 서브넷에 있는 DHCP 클라이언트와 서버 간의 통신을 중계하는 중요한 역할을 합니다. DHCP Relay Agent를 설정하지 않으면, 클라이언트는 서브넷을 넘는 DHCP 서버와 통신할 수 없습니다.
동적 PAT (Port Address Translation) 구성
동적 PAT는 여러 내부 네트워크의 IP 주소를 하나의 공인 IP 주소로 변환하여 인터넷과 통신할 수 있게 하는 방법입니다. 주로 여러 내부 사용자들이 외부와 통신할 때 사용하는 기법으로, 라우터의 인터페이스와 **Access Control List(ACL)**을 활용하여 구성합니다.
R1 라우터에서 동적 PAT를 설정
R1(config)# access-list 1 permit any
R1(config)# ip nat inside source list 1 interface f0/0 overload
R1(config)# int f0/0
R1(config-if)# ip nat outside
R1(config-if)# int f1/0
R1(config-if)# ip nat inside
R1(config-if)# int f0/1
R1(config-if)# ip nat inside
- access-list 1 permit any
- access-list 1: **ACL(Access Control List)**를 생성합니다.
- permit any: 모든 IP 주소에 대해 허용하는 규칙을 설정합니다. 즉, 모든 내부 네트워크가 외부와 통신할 수 있도록 설정됩니다. 이는 PAT에 사용할 주소를 지정할 때 필요합니다.
- ip nat inside source list 1 interface f0/0 overload
- ip nat inside source: 내부 네트워크에서 외부로 나가는 NAT(Network Address Translation)를 설정합니다.
- list 1: ACL 1에서 허용한 IP 주소들을 기반으로 NAT 변환을 적용합니다.
- interface f0/0: f0/0 인터페이스의 IP 주소를 외부 주소로 변환합니다.
- overload: 여러 내부 IP 주소를 하나의 공인 IP로 변환할 수 있도록 합니다. 이를 통해 여러 개의 내부 주소가 하나의 공인 IP 주소를 공유할 수 있게 됩니다. 동적 PAT는 여러 개의 내부 주소가 공인 주소를 공유하도록 해줍니다.
- int f0/0
- *f0/0*는 라우터의 외부 인터페이스입니다. 인터넷과 연결되는 인터페이스입니다. 이 인터페이스는 NAT 외부 인터페이스로 지정됩니다.
- ip nat outside
- ip nat outside: 이 명령어는 f0/0 인터페이스를 NAT 외부 인터페이스로 설정합니다. 즉, 인터넷과 연결된 인터페이스입니다.
- int f1/0
- *f1/0*는 내부 네트워크와 연결된 인터페이스입니다. 이 인터페이스는 NAT 내부 인터페이스로 설정됩니다.
- ip nat inside
- ip nat inside: f1/0 인터페이스를 NAT 내부 인터페이스로 설정합니다. 즉, 내부 네트워크와 연결된 인터페이스입니다.
- int f0/1
- *f0/1*는 또 다른 내부 네트워크와 연결된 인터페이스입니다. 이 인터페이스도 NAT 내부 인터페이스로 설정됩니다.
- ip nat inside
- ip nat inside: f0/1 인터페이스도 NAT 내부 인터페이스로 설정됩니다. 이는 여러 내부 네트워크 인터페이스를 NAT 내부 인터페이스로 지정하여, 해당 인터페이스에 연결된 모든 장비가 동적 PAT를 통해 인터넷에 접근할 수 있게 합니다.
구성 흐름
- ACL 설정: access-list 1 명령을 통해 모든 내부 IP 주소를 허용합니다.
- PAT 설정: ip nat inside source list 1 interface f0/0 overload 명령으로 내부 네트워크에서 나오는 모든 트래픽을 f0/0 인터페이스의 공인 IP 주소로 변환하며, overload 옵션을 사용하여 여러 내부 IP가 하나의 공인 IP를 공유할 수 있게 합니다.
- 인터페이스 설정:
- f0/0는 외부 인터페이스로, ip nat outside 명령으로 설정됩니다.
- f1/0 및 f0/1은 내부 인터페이스로, ip nat inside 명령으로 설정됩니다.
- 동적 PAT 적용: 내부 네트워크의 장치들은 이제 동적 PAT를 통해 하나의 공인 IP를 사용하여 외부 인터넷과 통신할 수 있습니다.
동적 PAT (Port Address Translation)
- 동적 PAT는 여러 개의 내부 IP 주소가 하나의 공인 IP 주소를 통해 인터넷에 접근할 수 있게 해줍니다. 각 트래픽은 포트 번호를 통해 구분되므로, 동일한 공인 IP 주소를 여러 장치가 공유할 수 있습니다.
- overload 옵션은 여러 장치가 하나의 공인 IP 주소를 사용하여 인터넷에 연결되도록 합니다. 각 연결은 고유한 포트 번호로 식별됩니다.
- 이 명령어들은 동적 PAT를 설정하여 본사와 지사의 사용자들이 R1의 f0/0 인터페이스 주소를 통해 인터넷에 접근할 수 있도록 합니다.
- *access-list 1*을 사용하여 NAT 적용 대상 주소를 지정하고, overload 옵션을 사용하여 여러 내부 주소가 하나의 공인 IP 주소를 공유하도록 설정합니다.
- *ip nat inside*와 ip nat outside 명령어로 내부와 외부 인터페이스를 설정하여 NAT가 제대로 동작하도록 합니다.
ACL (Access Control List) 기본 개념 및 구성 예시
- *ACL (Access Control List)**은 네트워크 트래픽에 대한 접근을 제어하는 규칙 집합입니다. 주로 보안을 강화하고, 특정 트래픽의 흐름을 제한하거나 허용하는 데 사용됩니다. ACL은 순차적으로 평가되며, 규칙 순서가 매우 중요합니다. 각 규칙은 위에서 아래로(top-down) 평가됩니다. 규칙이 매칭되면 그 이후의 규칙은 평가되지 않으며, 기본적으로 허용 또는 차단되는 트래픽을 결정합니다.
문제 설명
본사의 방화벽 관리자이자 R1의 관리자 역할을 맡고 있습니다. 외부에서 또는 지사에서 유입되는 트래픽을 필터링하고자 하는 상황입니다. 요구사항은 다음과 같습니다:
- 웹 접속은 **172.16.101.100 (PC)**로만 가능해야 하며, 172.16.101.0/24 네트워크로의 웹 접속은 불가합니다.
- 웹을 제외한 나머지 모든 트래픽은 허용해야 합니다.
- ACL은 1곳에만 적용해야 합니다.
구성 절차 및 ACL 명령어
- 웹 접속 허용 규칙 (172.16.101.100으로만): 외부에서 172.16.101.100으로의 HTTP 접속만 허용합니다.
- access-list 100 permit tcp any host 172.16.101.100 eq 80
- 웹 접속 차단 규칙 (172.16.101.0/24 네트워크로의 접속 차단): 외부에서 172.16.101.0/24 네트워크로의 HTTP 접속을 차단합니다.
- access-list 100 deny tcp any 172.16.101.0 0.0.0.255 eq 80
- 나머지 모든 트래픽 허용 규칙: 웹을 제외한 모든 IP 트래픽을 허용합니다 (예: SSH, ICMP, FTP 등).
- access-list 100 permit ip any any
- 기본적으로 나머지 트래픽 차단: ACL 규칙의 기본 동작은 차단이므로, 모든 매치되지 않은 트래픽은 차단됩니다. 이를 명시적으로 추가할 수 있습니다.
- access-list 100 deny ip any any
인터페이스에 ACL 적용
ACL을 f1/0 인터페이스의 outbound 방향에 적용하여 외부에서 들어오는 트래픽에 대해 필터링을 적용합니다.
int f1/0
ip access-group 100 out
전체 ACL 구성 예시
access-list 100 permit tcp any host 172.16.101.100 eq 80
access-list 100 deny tcp any 172.16.101.0 0.0.0.255 eq 80
access-list 100 permit ip any any
access-list 100 deny ip any any
int f1/0
ip access-group 100 out
설명
- 웹 접속 허용 (172.16.101.100): 외부에서 172.16.101.100으로 오는 HTTP 트래픽만 허용됩니다.
- 웹 접속 차단 (172.16.101.0/24): 외부에서 172.16.101.0/24 네트워크로의 HTTP 접속은 차단됩니다.
- 기타 모든 트래픽 허용: HTTP를 제외한 나머지 모든 트래픽은 허용됩니다 (예: SSH, ICMP, FTP 등).
- 기본 차단: 규칙에 매치되지 않는 트래픽은 차단됩니다.
이 ACL은 f1/0 인터페이스의 outbound 방향에 적용하여, 외부에서 들어오는 트래픽에 대해 필터링을 수행합니다.