상세 컨텐츠

본문 제목

25.03.14. 리눅스 가상머신 설치부터 네트워크 설정, NAT 구성까지: 실전 네트워크 관리 가이드

AWS CLOUD SCHOOL 9기

by AI Engineer crystal 2025. 3. 14. 17:06

본문

1. 리눅스 가상머신 설치 : 4 대

  • CPU/RAM/DISK: 2/2/20
[root@bastion ~]# echo "alias vi='vim'" >> ~/.bashrc
# 'vi' 명령어를 'vim' 명령어로 대체하는 alias를 현재 사용자의 .bashrc 파일에 추가합니다.

[root@bastion ~]# echo "alias vi='vim'" >> /home/user1/.bashrc
# 같은 alias를 user1 사용자의 .bashrc 파일에 추가합니다.

[root@bastion ~]# source ~/.bashrc
# 현재 사용자의 .bashrc 파일을 적용하여 새로운 alias를 즉시 활성화합니다.

[root@bastion ~]# cat /etc/sudoers | grep wheel
# /etc/sudoers 파일에서 'wheel' 그룹에 대한 설정을 확인합니다.
# %wheel	ALL=(ALL)	ALL: wheel 그룹의 사용자들이 모든 명령을 실행할 수 있도록 허용합니다.

[root@bastion ~]# echo "user1  ALL=(ALL)  NOPASSWD: ALL" >> /etc/sudoers
# user1 사용자에게 sudo를 사용할 때 비밀번호를 묻지 않도록 설정을 추가합니다.

[root@bastion ~]# cat /etc/sudoers | grep NOPASSWD
# /etc/sudoers 파일에서 NOPASSWD 설정을 확인합니다.
# 'user1  ALL=(ALL)  NOPASSWD: ALL'이 추가된 것을 확인할 수 있습니다.

[root@bastion ~]# exit
# root 사용자에서 로그아웃하여 user1 사용자로 전환합니다.

logout
# 현재 세션을 종료하고 로그아웃된 상태입니다.

[user1@bastion ~]$ mkdir ~/.ssh && chmod 700 ~/.ssh
# user1 사용자의 홈 디렉토리에 .ssh 디렉토리를 생성하고 해당 디렉토리의 권한을 700으로 설정합니다.
# 700 권한은 해당 디렉토리의 소유자만 접근할 수 있도록 합니다.

[user1@bastion ~]$ ssh-keygen -q -N "" -f lab0312.pem
# SSH 키 쌍을 생성합니다.
# -q: 조용한 모드로, 출력 메시지를 최소화합니다.
# -N "": 패스프레이즈 없이 키를 생성합니다.
# -f lab0312.pem: 생성할 키 파일의 이름을 lab0312.pem으로 지정합니다.

[user1@bastion ~]$ cat lab0312.pem.pub >> ~/.ssh/authorized_keys
# 공개 키(lab0312.pem.pub)를 user1 사용자의 .ssh/authorized_keys 파일에 추가합니다.
# 이로써 이 공개 키를 사용하는 클라이언트가 user1 사용자로 로그인할 수 있게 됩니다.

[user1@bastion ~]$ chmod 600 ~/.ssh/authorized_keys 
# .ssh/authorized_keys 파일의 권한을 600으로 설정하여, 해당 파일의 소유자만 읽고 쓸 수 있도록 합니다.
# 보안상 권한을 적절히 설정하는 것이 중요합니다.

[user1@bastion ~]$ sudo vi /etc/ssh/sshd_config 
# 'sshd_config' 파일을 수정하여 SSH 서버의 설정을 변경합니다.
# SSH 로그인에서 비밀번호 인증을 비활성화하려는 목적으로 해당 파일을 엽니다.
# (이후에 비밀번호 인증을 비활성화하는 설정을 합니다.)

71 PasswordAuthentication no
# SSH에서 비밀번호 인증을 비활성화합니다. 
# 비밀번호 대신 키 기반 인증을 사용하려면 이 항목을 "no"로 설정해야 합니다.

[user1@bastion ~]$ sudo systemctl restart sshd
# SSH 서비스(sshd)를 재시작하여 설정 변경 사항을 적용합니다.
# 새로운 설정이 적용되도록 SSH 서버를 재시작합니다.

[user1@bastion ~]$ sudo systemctl enable sshd
# SSH 서비스를 시스템 부팅 시 자동으로 시작되도록 설정합니다.
# 이 명령은 SSH가 시스템이 부팅될 때마다 자동으로 시작되도록 합니다.

[user1@bastion ~]$ sudo systemctl disable firewalld --now
# firewalld 서비스를 즉시 중지하고, 시스템 부팅 시 자동으로 시작되지 않도록 설정합니다.
# 이 명령은 방화벽을 비활성화하여 SSH 접속에 방해가 없도록 합니다.

[user1@bastion ~]$ sudo setenforce 0
# SELinux(보안 강화 리눅스)의 모드를 **비활성화**합니다.
# setenforce 0은 SELinux의 enforcing 모드를 permissive 모드로 변경합니다.
# 이는 SELinux의 보안 정책을 완화하여 제약을 없앱니다.

[user1@bastion ~]$ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
# SELinux 설정 파일을 수정하여 SELINUX를 완전히 **비활성화**하도록 변경합니다.
# SELINUX=enforcing을 SELINUX=disabled로 바꿔서 시스템을 재부팅 후 SELinux를 완전히 비활성화할 수 있게 합니다.

[user1@bastion ~]$ sudo cat /etc/selinux/config | grep ^SELINUX=
# SELinux 설정 파일에서 SELINUX 설정 값을 확인합니다.
# `grep ^SELINUX=` 명령을 사용하여 SELINUX 항목만 필터링해 출력합니다.

SELINUX=disabled
# SELinux가 비활성화된 상태임을 확인하는 출력입니다.
# 이전에 설정한 내용대로 SELinux가 비활성화되어 있음을 확인합니다.

# [hostname 변경하기]
[root@rocky3 ~]# hostnamectl set-hostname rocky3
[root@rocky3 ~]# vi /etc/hostname
rocky3

# [IP주소 변경하기]
[root@rocky3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160

# [변경된 내용 적용하기]
[root@rocky3 network-scripts]# systemctl restart NetworkManager
[root@rocky3 network-scripts]# ifconfig ens160 down
[root@rocky3 network-scripts]# ifconfig ens160 up

# [IP주소 확인하기]
[root@rocky3 network-scripts]# ip addr show
[root@rocky3 network-scripts]# ifconfig
[root@rocky3 network-scripts]# ip a
[root@rocky3 network-scripts]# hostname -I

# [Default Gateway, IP주소 확인하기]
[root@rocky3 ~]# ip route

2. GNS3 을 이용한 네트워크 토폴로지 구성하기

두 라우터 간 인터페이스 설정 및 IP 주소 할당 작업

R1 설정

R1# config t                # 전역 구성 모드로 진입
R1(config)# int f0/0         # FastEthernet0/0 인터페이스를 설정하려고 진입
R1(config-if)# mac-address 9859.7ac1.****  # 인터페이스에 MAC 주소를 수동으로 설정 (윈도우 컴퓨터의 Wi-Fi MAC 주소)
R1(config-if)# ip add dhcp   # FastEthernet0/0 인터페이스에 DHCP를 통해 IP 주소를 할당받도록 설정
R1(config-if)# no sh         # FastEthernet0/0 인터페이스를 활성화 (no shutdown)
  • FastEthernet0/0 인터페이스는 DHCP를 통해 IP 주소를 자동으로 할당받도록 설정되었습니다. 또한, MAC 주소는 수동으로 설정되었습니다. 이 인터페이스는 활성화되었습니다.i
R1(config-if)# int f0/1         # FastEthernet1/0 인터페이스를 설정하려고 진입
R1(config-if)# ip add 10.10.10.1 255.255.255.252   # FastEthernet1/0 인터페이스에 수동으로 IP 주소 설정 (10.10.10.1/30 서브넷)
R1(config-if)# no sh             # FastEthernet1/0 인터페이스를 활성화
  • FastEthernet0/1 인터페이스는 수동으로 IP 주소 10.10.10.1/30이 할당되었습니다. 이 인터페이스도 활성화되었습니다.
R1(config-if)# int f1/0         # FastEthernet0/1 인터페이스를 설정하려고 진입
R1(config-if)# ip add 172.16.1.3 255.255.255.0     # FastEthernet0/1 인터페이스에 수동으로 IP 주소 설정 (172.16.1.3/24 서브넷)
R1(config-if)# no sh             # FastEthernet0/1 인터페이스를 활성화
  • FastEthernet1/0 인터페이스는 수동으로 IP 주소 172.16.1.3/24가 할당되었습니다. 이 인터페이스도 활성화되었습니다.
R1(config-if)# do show ip int br   # 인터페이스 상태 확인 (인터페이스 및 IP 주소, 상태 정보)
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            192.168.X.Y    YES DHCP   up                    up
FastEthernet0/1            172.16.1.3      YES manual up                    up
FastEthernet1/0            10.10.10.1      YES manual up                    up
  • show ip interface brief 명령어를 통해 R1의 인터페이스 상태와 IP 주소를 확인할 수 있습니다.
    • FastEthernet0/0 인터페이스는 192.168.X.Y 주소를 DHCP로 받은 상태이며, 상태는 up입니다.
    • FastEthernet0/1 인터페이스는 172.16.1.3 주소가 수동으로 설정되었고, 상태는 up입니다.
    • FastEthernet1/0 인터페이스는 10.10.10.1 주소가 수동으로 설정되었고, 상태는 up입니다.

R2 설정

R2# config t                # 전역 구성 모드로 진입
R2(config)# int f0/0         # FastEthernet0/0 인터페이스를 설정하려고 진입
R2(config-if)# ip add 10.10.10.2 255.255.255.252   # FastEthernet0/0 인터페이스에 수동으로 IP 주소 설정 (10.10.10.2/30 서브넷)
R2(config-if)# no sh         # FastEthernet0/0 인터페이스를 활성화
  • FastEthernet0/0 인터페이스는 수동으로 IP 주소 10.10.10.2/30이 할당되었습니다. 이 인터페이스는 활성화되었습니다. R1과 R2는 서로 통신할 수 있는 주소 범위(10.10.10.1/30과 10.10.10.2/30)에 설정되었습니다.
R2(config-if)# int f0/1         # FastEthernet0/1 인터페이스를 설정하려고 진입
R2(config-if)# ip add 172.16.2.3 255.255.255.0     # FastEthernet0/1 인터페이스에 수동으로 IP 주소 설정 (172.16.2.3/24 서브넷)
R2(config-if)# no sh             # FastEthernet0/1 인터페이스를 활성화
  • FastEthernet0/1 인터페이스는 수동으로 IP 주소 172.16.2.3/24가 할당되었습니다. 이 인터페이스도 활성화되었습니다.
R2(config-if)# do show ip int br   # 인터페이스 상태 확인 (인터페이스 및 IP 주소, 상태 정보)
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            10.10.10.2      YES manual up                    up
FastEthernet0/1            172.16.2.3      YES manual up                    up
  • show ip interface brief 명령어를 통해 R2의 인터페이스 상태와 IP 주소를 확인할 수 있습니다.
    • FastEthernet0/0 인터페이스는 10.10.10.2 주소가 수동으로 설정되었고, 상태는 up입니다.
    • FastEthernet0/1 인터페이스는 172.16.2.3 주소가 수동으로 설정되었고, 상태는 up입니다.

정적 라우팅 및 기본 경로 설정 작업 (R1, R2)

R1의 설정

R1(config-if)# ip route 172.16.2.0 255.255.255.0 10.10.10.2  # 172.16.2.0/24 네트워크로 가는 경로를 10.10.10.2를 통해 설정
R1(config)#                                           # 설정 완료 후 전역 구성 모드로 돌아옴
  • 정적 라우팅: ip route 172.16.2.0 255.255.255.0 10.10.10.2 명령어는 R1이 172.16.2.0/24 네트워크로 가는 패킷을 10.10.10.2 주소로 향하게 하도록 설정합니다. 즉, R2FastEthernet0/0 인터페이스를 거쳐 해당 네트워크로 라우팅됩니다.
R1(config)# do show ip route  # 라우팅 테이블을 확인
  • show ip route 명령어는 라우팅 테이블을 보여주며, R1이 알고 있는 모든 네트워크와 경로 정보를 출력합니다.

출력 내용:

Gateway of last resort is 192.168.0.1 to network 0.0.0.0

     172.16.0.0/24 is subnetted, 2 subnets
C       172.16.1.0 is directly connected, FastEthernet0/1  # 172.16.1.0/24 네트워크는 FastEthernet0/1에 연결됨
S       172.16.2.0 [1/0] via 10.10.10.2  # 172.16.2.0/24 네트워크는 10.10.10.2를 통해 라우팅됨
     10.0.0.0/30 is subnetted, 1 subnets
C       10.10.10.0 is directly connected, FastEthernet1/0  # 10.10.10.0/30 네트워크는 FastEthernet1/0에 연결됨
S*   0.0.0.0/0 [254/0] via 192.168.0.1  # 기본 경로는 192.168.0.1을 통해 설정됨 (인터넷으로 나가는 경로)
C    192.168.0.0/22 is directly connected, FastEthernet0/0  # 192.168.0.0/22 네트워크는 FastEthernet0/0에 연결됨
  • 기본 경로 (default route): S* 0.0.0.0/0 [254/0] via 192.168.0.1는 R1이 인터넷으로 나가는 기본 경로를 192.168.0.1 게이트웨이를 통해 설정했음을 나타냅니다. 이 경로는 DHCP 서버에서 받아온 것입니다.
  • 정적 경로 (Static route): S 172.16.2.0 [1/0] via 10.10.10.2는 R1이 172.16.2.0/24 네트워크로 향하는 패킷을 10.10.10.2로 라우팅하도록 설정되었음을 보여줍니다.

R2의 설정

R2(config-if)# ip route 0.0.0.0 0.0.0.0 10.10.10.1  # 기본 경로를 10.10.10.1을 통해 설정
R2(config)#                                           # 설정 완료 후 전역 구성 모드로 돌아옴
  • 기본 경로 설정: ip route 0.0.0.0 0.0.0.0 10.10.10.1 명령어는 R2가 인터넷으로 나갈 때 기본 경로를 R1FastEthernet1/0 인터페이스 IP인 10.10.10.1을 통해 설정하도록 합니다. 이 경로는 R2가 인터넷과의 연결을 위해 사용하게 됩니다.
R2(config)# do show ip route  # 라우팅 테이블을 확인
  • show ip route 명령어는 라우팅 테이블을 확인하여, R2가 설정한 라우팅 정보를 출력합니다.

출력 내용:

Gateway of last resort is 10.10.10.1 to network 0.0.0.0

     172.16.0.0/24 is subnetted, 1 subnets
C       172.16.2.0 is directly connected, FastEthernet0/1  # 172.16.2.0/24 네트워크는 FastEthernet0/1에 연결됨
     10.0.0.0/30 is subnetted, 1 subnets
C       10.10.10.0 is directly connected, FastEthernet0/0  # 10.10.10.0/30 네트워크는 FastEthernet0/0에 연결됨
S*   0.0.0.0/0 [1/0] via 10.10.10.1  # 기본 경로는 10.10.10.1을 통해 설정됨
  • 기본 경로: S* 0.0.0.0/0 [1/0] via 10.10.10.1는 R2가 인터넷으로 나갈 기본 경로를 R1FastEthernet1/0 인터페이스인 10.10.10.1을 통해 설정했음을 나타냅니다.

⇒ bastion, lb ↔ web1, web2 간에는 통신이 가능해야 합니다.

3. NAT / PAT 구성하기

Dynamic PAT 구성

172.16.1.0/24, 172.16.2.0/24 에 있는 호스트(서버)들은 R1 의 fa0/0 에 입력된 공인주소 1개를 이용하여 인터넷을 사용할 수 있어야 합니다.

R1(config)# access-list 12 permit 172.16.1.0 0.0.0.255
! ACL 12를 정의하고, 172.16.1.0/24 네트워크를 허용합니다.

R1(config)# access-list 12 permit 172.16.2.0 0.0.0.255
! ACL 12에 172.16.2.0/24 네트워크를 추가로 허용합니다.

R1(config)# ip nat inside source list 12 int fa0/0 overload
! NAT 설정: ACL 12에 정의된 IP 주소 범위(172.16.1.0/24, 172.16.2.0/24)를 
! fa0/0 인터페이스를 통해 외부로 NAT 변환하고, 오버로드를 사용하여 여러 호스트가 하나의 공인 IP를 공유하도록 설정합니다.

R1(config)# int f0/0
R1(config-if)# ip nat outside
! fa0/0 인터페이스를 외부(NAT outside)로 설정합니다. 이 인터페이스는 외부 네트워크와 연결됩니다.

R1(config-if)# int f1/0
R1(config-if)# ip nat inside
! f1/0 인터페이스를 내부(NAT inside)로 설정합니다. 이 인터페이스는 내부 네트워크와 연결됩니다.

R1(config-if)# int f0/1
R1(config-if)# ip nat inside
! f0/1 인터페이스를 내부(NAT inside)로 설정합니다. 또 다른 내부 네트워크 연결을 위해 설정합니다.

 

  1. ACL 설정: access-list 12 명령을 통해 특정 내부 네트워크 범위(172.16.1.0/24, 172.16.2.0/24)를 허용합니다.
  2. NAT 설정: ip nat inside source 명령으로 내부 네트워크의 주소를 fa0/0 인터페이스를 통해 NAT 변환하고, 오버로드를 사용하여 다수의 내부 IP가 공인 IP 하나를 공유하도록 합니다.
  3. 인터페이스 설정: ip nat inside 및 ip nat outside를 사용하여 각 인터페이스(f0/0은 외부, f1/0, f0/1은 내부)를 NAT 설정에 맞게 구성합니다.

Static PAT 1

  • 목표: 외부 사용자가 공인 IP의 22022 포트를 통해 Bastion 호스트의 22번 포트로 SSH 접속할 수 있도록 설정합니다.
  • 공인 IP의 22022 포트가 Bastion 호스트(내부 IP 172.16.1.101)의 22번 포트로 매핑됩니다.
R1(config)# ip nat inside source static tcp 172.16.1.101 22 int f0/0 22022
  • ip nat inside source static: 내부 소스 IP 주소와 포트를 외부에 노출되는 IP 주소와 포트로 변환합니다.
  • tcp 172.16.1.101 22: 내부 Bastion 서버의 IP(172.16.1.101)와 포트(22번)를 지정.
  • int f0/0: 외부 인터페이스인 f0/0을 통해 NAT 변환이 이루어지도록 설정.
  • 22022: 외부에서 접속할 때 사용할 공인 IP의 포트 번호 22022를 지정.

Static PAT 2

외부 사용자가 공인 IP 주소의 80 포트로 접속하면 로드밸런서에 연결되고, 실제 웹 서비스는 Web1Web2에서 제공되도록 설정합니다. 로드밸런서에 대한 접속만 외부에서 가능하도록 Static PAT를 구성합니다.

R1(config)# ip nat inside source static tcp 172.16.1.102 80 int f0/0 8888
! 172.16.1.102 (로드밸런서 IP) 의 80번 포트를 외부에서 8888번 포트로 접근할 수 있도록 설정
! 이 설정은 외부 사용자가 공인 IP의 8888 포트로 접속하면 로드밸런서(172.16.1.102)의 80 포트로 전달됩니다.

HAProxy 설정 (LB)

로드밸런서에서 HAProxy를 사용하여 웹 서버(Web1과 Web2)로 트래픽을 분배하는 설정입니다. HTTP 프로토콜을 사용하여 round-robin 방식으로 트래픽을 분배하고, 로드밸런서에서의 상태 페이지는 /haproxy?stats로 확인 가능합니다.

HAProxy 설치 및 설정

[user1@lb ~]$ sudo dnf -y install haproxy
! HAProxy를 설치합니다.

[user1@lb ~]$ sudo vi /etc/haproxy/haproxy.cfg
! HAProxy 설정 파일을 엽니다. 기존 내용을 모두 지우고 새로운 설정을 추가합니다.

HAProxy 설정 파일 (/etc/haproxy/haproxy.cfg)

global  # HAProxy 시스템에 대한 설정값
   log /dev/log local0       # 로그를 local0으로 출력
   log /dev/log local1 notice # 로그를 local1로 출력
   chroot /var/lib/haproxy    # HAProxy의 chroot 디렉토리 설정
   stats timeout 30s          # 상태 페이지에 대한 타임아웃 설정
   user haproxy               # HAProxy가 실행될 사용자 설정
   group haproxy              # HAProxy가 실행될 그룹 설정
   daemon                     # HAProxy를 데몬 모드로 실행

defaults
   log global                  # 로깅을 global 설정에 맞게 적용
   mode http                   # HTTP 모드로 로드밸런싱
   option httplog              # HTTP 요청에 대한 로그 설정
   option dontlognull          # null 요청을 로그에 기록하지 않음
   timeout connect 5s          # 서버 연결 타임아웃 5초
   timeout client 1m           # 클라이언트와의 연결 타임아웃 1분
   timeout server 1m           # 서버와의 연결 타임아웃 1분

frontend http_front
   bind *:80                   # 80번 포트에서 들어오는 트래픽을 수신
   stats uri /haproxy?stats    # 로드밸런서 상태 페이지는 /haproxy?stats 경로에서 확인
   default_backend http_back   # 기본 백엔드 설정

backend http_back
   balance roundrobin          # 라운드로빈 방식으로 트래픽 분배
   server server_name1 172.16.2.101:8000 check   # Web1 (172.16.2.101:8000)
   server server_name2 172.16.2.102:8000 check   # Web2 (172.16.2.102:8000)

HAProxy 서비스 시작

[user1@lb ~]$ sudo systemctl stop haproxy
! HAProxy 서비스를 중지합니다.

[user1@lb ~]$ sudo systemctl start haproxy
! HAProxy 서비스를 시작합니다.

 

4. 웹 서버 구성

Web1 서버에서 httpd를 설치하고, 웹 페이지를 구성한 후 서비스를 시작하는 과정입니다. 이 두 웹 서버는 HAProxy에 의해 로드밸런싱되어 트래픽을 분배받게 됩니다. Web1은 "WEB1", Web2는 "WEB2"라는 텍스트를 각자의 index.html 페이지에서 제공할 것입니다.

Web1 설정

[user1@web1 ~]$ sudo dnf -y install httpd
! Apache HTTP 서버(httpd)를 설치합니다.

[user1@web1 ~]$ sudo vi /etc/httpd/conf/httpd.conf
! Apache 서버의 기본 설정 파일을 엽니다.  Listen 8000 으로 변경합니다.
! 이 단계는 웹 서버 설정을 변경할 때 필요한 경우에 수정할 수 있습니다.

[user1@web1 ~]$ echo "WEB1" | sudo tee /var/www/html/index.html
! 웹 페이지의 기본 내용으로 "WEB1" 텍스트를 작성하여 `/var/www/html/index.html`에 저장합니다.
! 이 페이지는 Web1 서버에 접속했을 때 보여집니다.

[user1@web1 ~]$ sudo systemctl restart httpd
! httpd 서비스를 다시 시작하여 변경 사항을 적용합니다.
! 이제 Web1 서버에서 웹 페이지가 제공됩니다.

Web2 설정

[user1@web2 ~]$ sudo dnf -y install httpd
! Web2 서버에 Apache HTTP 서버(httpd)를 설치합니다.

[user1@web2 ~]$ sudo vi /etc/httpd/conf/httpd.conf
! Apache 서버의 기본 설정 파일을 엽니다. Listen 8000 으로 변경합니다.

[user1@web2 ~]$ echo "WEB2" | sudo tee /var/www/html/index.html
! 웹 페이지의 기본 내용으로 "WEB2" 텍스트를 작성하여 `/var/www/html/index.html`에 저장합니다.
! 이 페이지는 Web2 서버에 접속했을 때 보여집니다.

[user1@web2 ~]$ sudo systemctl restart httpd
! httpd 서비스를 다시 시작하여 변경 사항을 적용합니다.
! 이제 Web2 서버에서 웹 페이지가 제공됩니다.

 

 

확인 > http://192.168.2.92:8888

아래는 .ssh/config 파일에 대한 주석입니다.

# 'bastion' 호스트 설정
Host bastion
  User user1                                    # 'bastion'에 접속할 사용자 계정은 'user1'입니다.
  Hostname 192.168.2.92                         # 'bastion' 호스트의 실제 IP 주소 (여기서는 f0/0의 공인 주소)
  IdentityFile ~/lab0312.pem                    # 접속 시 사용할 개인 키 파일 지정 (여기서는 lab0312.pem 파일)
  StrictHostKeyChecking no                      # 호스트 키 확인을 하지 않음 (보안을 조금 희생하지만 자동화에 유리)
  
# 'lb' 호스트 설정 (로드밸런서)
Host lb
  User user1                                    # 'lb'에 접속할 사용자 계정은 'user1'입니다.
  Hostname 172.16.1.102                         # 'lb' 호스트의 실제 IP 주소
  IdentityFile ~/lab0312.pem                    # 접속 시 사용할 개인 키 파일 지정
  StrictHostKeyChecking no                      # 호스트 키 확인을 하지 않음
  ProxyCommand ssh bastion -W %h:%p              # 'bastion'을 통해 'lb'에 접속하도록 설정 (중간 서버를 통한 접속)

# 'web1' 호스트 설정
Host web1
  User user1                                    # 'web1'에 접속할 사용자 계정은 'user1'입니다.
  Hostname 172.16.2.101                         # 'web1' 호스트의 실제 IP 주소
  IdentityFile ~/lab0312.pem                    # 접속 시 사용할 개인 키 파일 지정
  StrictHostKeyChecking no                      # 호스트 키 확인을 하지 않음
  ProxyCommand ssh bastion -W %h:%p              # 'bastion'을 통해 'web1'에 접속하도록 설정

# 'web2' 호스트 설정
Host web2
  User user1                                    # 'web2'에 접속할 사용자 계정은 'user1'입니다.
  Hostname 172.16.2.102                         # 'web2' 호스트의 실제 IP 주소
  IdentityFile ~/lab0312.pem                    # 접속 시 사용할 개인 키 파일 지정
  StrictHostKeyChecking no                      # 호스트 키 확인을 하지 않음
  ProxyCommand ssh bastion -W %h:%p              # 'bastion'을 통해 'web2'에 접속하도록 설정

 

  1. Host: 각 호스트의 설정 이름을 정의합니다. 이 이름은 이후에 ssh 명령을 통해 참조됩니다 (예: ssh bastion, ssh lb, ssh web1 등).
  2. User: 각 호스트에 접속할 사용자 이름을 지정합니다.
  3. Hostname: 접속할 실제 호스트의 IP 주소를 지정합니다.
  4. IdentityFile: 접속 시 사용할 개인 키 파일을 지정합니다.
  5. StrictHostKeyChecking no: SSH 접속 시, 호스트 키 확인을 건너뛰도록 설정하여 첫 접속 시 키 확인을 생략합니다. 이 옵션은 자동화된 스크립트에서 유용하지만, 보안상 주의가 필요합니다.
  6. ProxyCommand: ssh 명령어를 사용하여 **중간 서버(bastion)**를 통해 다른 서버에 접속할 수 있도록 설정합니다. 여기서는 bastion을 중계 서버로 사용하여 lb, web1, web2에 접속합니다. %h와 %p는 각각 호스트와 포트 번호로 대체됩니다.
  • bastion 호스트에 직접 접속할 수 있으며, lb, web1, web2 호스트는 모두 bastion을 경유해서 접속합니다.

관련글 더보기