Server
DNS, WEB server 구축 및 SSL 적용 같은 것들을 진행했습니다.
DNS server
Debian 11.5(CLI)를 서버로 두고 시작하였습니다.
apt install vim bind9
위 명령어로 안깔려 있는 vim과 bind9를 설치하였습니다. 기본적인 옵션을 주기 위해 named.conf.options에서 진행합니다. /etc/bind/named.conf.options에서 편집합니다.
allow-recursion { any; }; 만 추가해 줍니다. 그리고 똑같은 경로에서 named.conf.local에서 추가해줍니다.
내부망과 외부망을 나눠서 진행 위 ACL이 HQ을 기준으로 서로 정보를 아는 ip들의 모음입니다.
다음 위 zone파일을 설정해줍니다. 처음으론 /var/cache/bind/korea.com.inter.zone 입니다. 아무런 설정이 없을 시 상대경로로 적게되면 /var/cache/bind/[file]로 들어가서 꼭 절대경로로 적어줄 필요는 없습니다.
Domain은 korea.com으로 진행하였습니다. ca, hq, br1, br2와 같이 router장비들 IP 들이고 www는 웹 서버 입니다.
Router 장비들은 각각의 루프백 주소이고 서버만 외부 게이트웨이 주소입니다.
전부 제대로 설정을 해줬으면 위 명령어를 쳤을 때 IP가 정상적으로 뜨는 것을 확인할 수 있습니다.
DHCP server
apt install isc-dhcp-server -y
위 명령어로 추가로 dhcp server 패키지를 설치해줍니다.그리고 /etc/dhcp/dhcpd.conf파일을 고쳐줍니다.
위 2개를 아까 저희가 설정한 DNS대로 변경해줍니다.
그리고 뿌려줄 IP의 대역대를 정해줍니다. 이러고 재시작해주면 끝입니다.
Window 11에서 ipconfig /renew로 dhcp를 가져올 때 설정한대로 100 ~ 199사이의 ip가 잡히고 DNS가 korea.com으로 잘 잡힌 것을 볼 수 있습니다. 핑과 DNS질의도 아주 잘 갑니다.
Network
네트워크에서 사용될 토폴로지 입니다. HQ와 3개의 영역으로 구성된 네트워크입니다. eigrp로 라우팅되어 있지만 내부망과 IP대역이 달라 현재는 라우터끼리만 통신이 가능하고 내부 PC끼리는 통신이 불가능합니다. HQ와 나머지 영역들을 GRE 터널과 DMVPN을 이용하여 통신되게 설정 하려합니다.
[ HQ ]
1. ip address 10.0.0.1 255.255.255.0
2. ip nhrp authentication [key] # 우리는 하지 않음
3. ip nhrp map multicast dynamic
4. ip nhrp network-id [number]
5. ip ospf network point-to-multipoint # 우리는 eigrp를 사용하기에 하지 않음
6. tunnel source [loop-back | source interface ip]
7. tunnel mode gre multipoint
8. tunnel key [number]
9. ip nhrp holdtime [seconds, default 7200]
1. Tunnel Interface에서 사용할 IP를 할당합니다.
2. nhrp 인증에서 사용할 key를 입력합니다.
3. 터널을 통과해서 multicast traffic을 전달 가능하게 합니다. 해당 설정이 없으면 Dynamic routing protocol이 정상적으로 동작하지 않습니다.
4. DMVPN Network에서 유일한 식별자이며 다를 경우 통신이 불가능합니다.
5. OSPF의 network type를 변경해준겁니다. 하지만 저희는 eigrp를 사용하기에 필요없습니다.
6. tunnel source는 외부에서 라우팅이 될 수 있는 IP를 설정해주면 되고 해당 IP는 차후에 Spoke router의 multicast map에서 사용됩니다.
7. gre mode는 multipoint로 지정해줍니다.
8. 여러 개의 multipoint gre를 구성할 경우 구분할 숫자를 설정합니다.
9. NHRP map의 hold time을 지정합니다.
★ GRE과 다르게 mGRE같은 경우 tunnel의 목적지 설정이 존재하지 않습니다. multipoint 구조이기 때문에 tunnel구성은 동적으로 이루어지기 때문이다.
[BR1]
1. ip address 10.0.0.2 255.255.255.0
2. ip nhrp authentication [key] # 우린 사용하지 않음
3. ip nhrp map multicast [hub router ip]
4. ip nhrp map [hub router tunnel ip] [hub router ip]
5. ip nhrp network-id 1
6. ip nhrp nhs [hub router ip]
7. tunnel source [this spoke router ip]
8. tunnel mode gre multipoint
1. Tunnel interface에서 사용할 IP를 할당합니다.
2. nhrp 인증에 사용할 key값을 지정합니다.
3. 터널을 통과해서 multicast traffic을 전달을 가능하게 합니다. 해당 설정이 없으면 dynamic routing protocol이 정상적으로 작동하지 않습니다. hub router의 설정과 조금 다르게 multicast가 전달 될 ip주소를 지정해주면 됩니다.
4. 해당 명령어는 정적으로 nhs의 주소와 물리적으로 맵핑시키는 역할을 합니다.
5. DMVPN Network에서 유일한 식별자이며 다를 경우 통신이 불가합니다.
6. NHS(Next Hop Server) 설정을 해주며 hub의 tunnel 주소를 설정합니다.
7. tunnel source는 외부에서 라우팅 될 수 있는 IP를 설정해주면 됩니다.
8. gre mode는 multipoint로 지정합니다.
★ ip nhrp map multicast의 IP설정을 hub router의 tunnel ip로 설정할 경우 OSPF Neighbor가 끊어지고 붙는 현상이 발생합니다.
EIGRP 라우팅 연결로 하는 경우 문제가 생깁니다. hub router는 모드 spoke router에 관한 routing table이 존재하지만 spoke router끼리는 routing table이 존재하지 않습니다. 그 이유는 Split-horizon때문입니다.
Split-horizon이란
Split-horizon은 특정 인터페이스로 광고받은 정보는 다시 해당 인터페이스로 광고하지 않는 특성이다. (Loop를 방지하기 위한 목적으로 활성화 되어있습니다. 하지만 hub & spoke 구간에서 하나의 인터페이스로 허브를 구성한 경우에는 반드시 비활성화 시켜야만 Spoke router끼리 정보교환이 가능해집니다)
비활성화 방법
[HQ]
int tunnel0
no ip split-horizon eigrp [number]
eigrp로 다른 spoke들과 tunnel로 연결해준 번호를 적어두면 됩니다.
Crypto Profile 사용
- point-to-point GRE일 경우 tunnel destination [tunnel-destination] 명령어로 입력한 IP주소를 사용하여 ACL 및 set peer 주소를 설정합니다.
- multipoint GRE일 경우 tunnel destination 명령어를 사용할 수 없기 때문에 NHRP Map에 등록된 상대방 NHRP Peer 정보를 확인하여 ACL 및 set peer를 설정합니다.
- GRE에서 쓰는 IP 패킷과 IPSec에서 사용하는 IP패킷이 동일하기 때문에 ESP앞에 IP패킷을 붙이지 않기 위해서 IPSec을 transport 모드로 구성해야 합니다.
[HQ]
conf t
crypto isakmp policy 1
authentication pre-share
encryption aes
hash sha
group 14
!
crypto isakmp key [key] address 0.0.0.0 0.0.0.0
crypto ipsec transform-set [transform-set name] esp-aes esp-sha-hmac
mode transport
!
crypto ipsec profile [crypto ipsec profile name]
set transform-set [transform-set name]
!
int tunnel 0
tunnel protection ipsec profile [crypto ipsec profile name]
!
Server - 2 ( 인증서 설정 )
위에 있던 설명들 싹다 설정하고 거기다 loopback 1에 11.11.11.11 IP를 할당해주고 ca.korea.com IP -> 11.11.11.11 로 static NAT 설정만 해주면 됩니다.
ip nat inside source static 192.168.10.1 11.11.11.11
이제 그럼 위 사진과 같이 토폴로지에 맞춰서 external DNS의 설정을 바꿔줍니다.
[QH]
ip domain-name koera.com
ip name-server 192.168.10.1
ip domain-lookup
[BRn]
ip domain-name korea.com
ip name-server 11.11.11.11
ip domain-lookup
위 명령어를 각각의 router에 맞게 적어줍니다. 그 다음에 QH, BRn에서 ca.korea.com으로 ping을 보내봅시다.
HQ#ping ca.korea.com
Translating "ca.korea.com"...domain server (192.168.10.1) [OK]
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
BR1#ping ca.korea.com
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 11.11.11.11, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 9/10/11 ms
잘 되는 것을 확인할 수 있습니다. 이제 HQ에서 개인키를 생성해줍니다.
BR1(config)#crypto key generate rsa modulus 2048 label hq.korea.com
BR1(config)#do show crypto key mypubkey rsa
% Key pair was generated at: 11:16:04 UTC Nov 16 2022
Key name: hq.korea.com
Key type: RSA KEYS
Storage Device: not specified
Usage: General Purpose Key
Key is not exportable.
Key Data:
30820122 300D0609 2A864886 F70D0101 01050003 82010F00 3082010A 02820101
0096EB32 E01FE12D FDE8A0B5 BF8D8946 6BC4038E 6A475887 7C6D7D12 5C34965E
4A85B8F3 1475070E 2BD6F884 71CEB2B5 0274981A EC72EB89 C00FBE42 7809F0B1
1A64CAE4 11DA46D8 C134F19A 13A31858 79E76C5E 873A737E 61C2951E C636992E
E6A8F4C9 91112879 38D8E1BF 6D4F0B05 FCE4038E 0057E5AF 28A5926D 202C1DEE
9E2DF748 FA5E0195 57EB06A4 B7A5631B 592C2373 6BFC28DD C60378E3 4BBA18C7
72764B8E 056823CA C0965051 E815A149 25DA8BCA 95E2A1EA B0D1FACF 2F0B544B
2D944AB5 86D4E5C8 1ED478F9 5651033D D619FDB9 7BEB0A43 873FF837 39F64280
AE15806C 614C1490 16ED401F 60F720BF D9AF08A1 D5685189 C7340701 482B7322
87020301 0001
% Key pair was generated at: 11:16:04 UTC Nov 16 2022
Key name: hq.korea.com.server
Key type: RSA KEYS
Temporary key
Usage: Encryption Key
Key is not exportable.
Key Data:
307C300D 06092A86 4886F70D 01010105 00036B00 30680261 009262AF 24199DF1
4BE4C0C7 EFBC123F 13F8E55E 017E1D9F 804E6AB5 7F7FB2B8 5C6C5F50 512282BF
ADAD3AF1 8ADBA977 0FA03545 C521C587 B74A9865 A8C9C4FF 08159C65 44FECDE7
7583F06F 92272C3B 685907CD 8B1FD048 FD1D3614 30E59295 23020301 0001
위와 같이 잘 생성된 것을 확인할 수 있습니다. 그리고 항상 server 인증서로 암호화를 진행할 때는 router와 현재 시간을 맞춰줘야합니다. 그렇기 때문에 KST +9 시간으로 QH router의 clock를 변경해줍니다.
BR1(config)#clock timezone KST +9
BR1(config)#do cl
BR1(config)#do show clock
*20:18:42.325 KST Wed Nov 16 2022
현재 시간으로 잘 맞춰졌습니다! 이제 ca.korea.com을 trustpoint로 만들어 줘야합니다.
HQ(config)#crypto pki trustpoint korea-CA
HQ(ca-trustpoint)#enrollment url ftp://ca.korea.com pem
HQ(ca-trustpoint)#subject-name CN=hq.korea.com,C=KR,O=GIFTS
HQ(ca-trustpoint)#rsakeypair hq.korea.com
HQ(ca-trustpoint)#ip-address none
HQ(ca-trustpoint)#revocation-check crl none
HQ(ca-trustpoint)#fqdn hq.korea.com
HQ(ca-trustpoint)#serial-number none
ftp로 서버랑 인증서를 주고받기 위해서 enrollment로 ftp서버를 지정해줍니다. 이때 trustpoint의 korea-CA라는 이름은 Root 인증과 이름이 같아야한다고 합니다. 아래 사진 참고
그 후 ac.korea.com 서버에서 vsftpd와 ftp를 딸아줍니다. ftp는 테스트를 위해 설치해줍니다. 그 후 /etc/vsftpd.conf에 들어가 간단한 설정들을 바꿔줍니다.
apt install vsftpd ftp -y
31번과 35번이 주석이 되어 있는데 이것들을 지워줍니다. 저희는 인증서를 가져와야하기 때문에 write권한이 있어야 하기 때문입니다. 그 후 ftp를 위한 유저 또한 만들어 줍니다.
adduser -gecos "" router
오타 없습니다. 전부 입력해줘야합니다. 그 후 ftp localhost란 명령어를 친후 router계정으로 로그인 해봅시다.
지금 저는 로그인하고 ls를 쳤을 때 뭔가 있지만 아마 처음만든 계정이면 아무것도 없을 것 입니다. 아무튼 잘 작동하는 것을 확인했습니다.
HQ(config)#ip ftp username router
HQ(config)#ip ftp password Pa$$worD
HQ에서 위 명령어를 입력하여 ftp계정 등록을 해줘야 합니다. 그 후 아래 명령어를 입력하여 HQ라우터에서 생성된 key를 넘겨줍니다.
HQ(config)#crypto pki enroll korea-CA
% Start certificate enrollment ..
% The subject name in the certificate will include: CN=hq.korea.com,C=KR,O=GIFTS
% The subject name in the certificate will include: hq.korea.com
Send Certificate Request to file system? [yes/no]: yes
% Certificate request sent to file system
% The 'show crypto pki certificate verbose korea-CA' commandwill show the fingerprint.
HQ(config)#!
*Nov 16 11:50:18.435: CRYPTO_PKI: Certificate Request Fingerprint MD5: A8B5DCC3 285EE903 3B2A3ABA CD62A14E
*Nov 16 11:50:18.435: CRYPTO_PKI: Certificate Request Fingerprint SHA1: 21223EF1 F284BEDD 701DD7C5 11C78563 4CAFCE04
위 처럼 콘솔창에 뜨면 성공한 것 입니다. 서버에서 확인해봅시다.
korea-CA.req파일이 존재하는 것을 볼 수 있습니다. 이제 이 key를 가지고 ca 서명을 해줍니다.
openssl ca -in korea-CA.req -out korea-CA.crt
아래 Sign the certificate? 에서 Y를 누르면 성공적으로 생성되게 됩니다. 저 비밀번호 입력하는거나 완전 오류가 뜬다면 아래 포스터를 봐주세요.
korea-CA.crt 인증서가 생긴것을 확인할 수 있습니다. 이제 root korea-CA.crt 인증서를 현재 이 ftp user 경로에 korea-CA.ca라는 이름으로 복사해줍니다.
참고
'기능반공부 > 네트워크' 카테고리의 다른 글
[network] IT 네트워크 심화 수업 - 1 ( GRE, IPSec ) (0) | 2022.11.14 |
---|---|
[네트워크] VLAN, Inter-VLAN (0) | 2022.02.09 |
[네트워크] 맥 주소 변환 + rip (0) | 2022.02.02 |
[기능반] 서버구축 3. (0) | 2022.01.28 |
[네트워크] NAT에 대해서 (0) | 2022.01.27 |