Cloud Solution Architect/네트워크

NAT 서버

YunHyeong 2023. 3. 12. 14:34

NAT서버는 이번 프로젝트에서 구축할 온프레미스 환경에서 사내망과 외부망을 연결하는 역할을 하는 중심 서버입니다. NAT 서버가 없다면 내부에서 서버를 구축하더라도 외부와 통신할 수 없게 됩니다. 또한 외부와 통신을 위해 내부에 있는 서버들이 모두 NAT서버와 연결되기 때문에 이번 프로젝트에서 핵심 서버라고 볼 수 있겠습니다.

 

1. 기본적인 NAT 설정

NAT는 사내망과 외부망을 연결하기 때문에 랜카드가 2개(사내망용 + 외부망용) 들어갑니다. 따라서 외부에서 사내망에 접근하기 위해서는 반드시 외부망을 활용하여 접근해야 하며 각 랜카드에 몇가지 설정이 필요합니다.

1) 사내망 랜카드 설정

vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 사내망용 랜카드에 접근

### 파일 설정
TYPE=Ethernet # 랜카드 타입
BOOTPROTO=none ## ip 할당방식
NAME=ens33 # 랜카드 이름
DEVICE=ens33 # 장치 이름
ONBOOT=yes # 부팅시 자동 활성 여부
IPADDR=172.xxx.xxx.xxx # NAT 사내망 ip 주소 
NETMASK=255.255.255.0 # 서브넷 마스크
###

2) 외부망 랜카드 설정

 vi /etc/sysconfig/network-scripts/ifcfg-ens32 # 외부망용 랜카드 접근
TYPE=Ethernet # 랜카드 타입
BOOTPROTO=none # ip 할당 방식
NAME=ens32 # 랜카드 이름
DEVICE=ens32 # 장치 이름
ONBOOT=yes # 부팅시 자동 활성화 여부
IPADDR=192.xxx.xxx.xxx # 외부망 주소
NETMASK=255.255.255.0 # 서브넷 마스크
GATEWAY=192.xxx.xxx.xxx # 게이트 웨이
DNS1=8.8.8.8 # DNS server 주소 (By google)
DNS2=8.8.4.4 # DNS server 주소 (By google)

2. DHCP(Dynamic Host Configuration Protocol)

DHCP은 호트스 IP 구성 관리를 단순화하는 IP 표준입니다. 동적 호스트 구성 프로토콜 표준에서는 DHCP 서버를 사용하여 IP 주소 및 관련된 기타 구성 세부 정보를 네트워크의 DHCP 사용 클라이언트에게 동적으로 할당하는 방법을 제공합니다. 

 

yum install dhcp -y # dhcp를 설치합니다.

vi /etc/dhcp/dhcpd.conf # dhcp daemon 설정을 위해 dhcpd.conf 접근

### daemon 설정
ddns-update-style interim; # dhcpd가 dns server 업데이트 하는데 사용됩니다.
subnet (서브넷 주소) netmask 255.255.255.0 {
option routers (라우터 IP); # 라우터의 IP
option subnet-mask 255.255.255.xxx;
range dynamic-bootp 172.xxx.xxx.110 172.xxx.xxx.120; # 사내망 서버에 자동으로 부여할 주소 범위를 지정합니다 (110 ~ 120)
option domain-name-servers 8.8.8.8, 8.8.4.4; # 구글이 무료로 제공하는 DNS 서버 주소
default-lease-time 7200; # DHCP 임대시간
max-lease-time 86400; # 86400 이후 Ip를 회수한다
}
###

systemctl enable --now dhcpd # dhcpd 재시작

 

3. SSHD(Secure Shell Daemon) - Key pair 생성

SSH(Secure Shell)은 네트워크 상에서 다른 컴퓨터(서버)에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사살 수 있도록  해 주는 프로토콜입니다. 그리고 이는 통신을 요청하는 컴퓨터(서버)에서 사용되기 떄문에 Outbound(나가는 요청)이라고 합니다.

 

이와 반대로, SSHD는 SSH Daemon의 줄임말로 백그라운드에서 SSH의 연결을 대기하고 있는 Inbound 역할을 합니다. 따라서 SSH 프로토콜을 사용하여 들어오는 요청을 수신하고, 사용자 인증, 암호화, 터미널 연결, 파일 전송 및 터널링 등의 역할을 합니다. 

 

1)  NAT 서버에서 키(Key)를 생성 및 전달

ssh-keygen -t rsa # 현재 접속한 NAT 서버에서 Key를 생성합니다.
ssh-copy-id -i id_rsa root@(접속할 서버 IP) # NAT와 연결할 서버에 Key를 전달합니다.
vi /etc/ssh/sshd_config # 연결할 서버에 접속하여 /etc/ssh/sshd_config 경로로 들어가 PasswordAuthentication을 no로 설정해줍니다.
systemctl restart sshd # NAT 서버에서 sshd를 재시작합니다.

 

4. HAproxy(Load Balancer) - L4, L7 S/W

HAproxy는 여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 애플리케이션을 위한 고가용성 로드 밸런서 및 역방향 프록시를 제공하는 무료 오픈 소스 소프트웨어 입니다. C로 작성 되었으며 빠르고 효율적(프로세스 및 메모리 사용 측명에서)으로 유명합니다.

yum install -y haproxy # haproxy 설치
vi /etc/haproxy/haproxy.cfg # haproxy.cfg 파일 설정

### 파일 설정

global
    daemon # 백그라운드 실행

defaults
    mode               http

frontend  http-in
    bind *:80 # 80 port 백엔드로 던져줌
    acl firefox hdr_sub(User-Agent) Firefox
    acl chrome hdr_sub(User-Agent) Chrome
    default_backend    backend_servers
    use_backend bk_firefox if firefox
    use_backend bk_chrome if chrome

backend backend_servers
    balance            roundrobin # 순차적 연결 방식 <-> * least connection 방식 : 최소 연결 방식
#    cookie  SVID insert indirect nocache maxlife 10s
    server             web01 172.xxx.xxx.xxx:80 cookie w1 check
    server             web02 172.xxx.xxx.xxx:80 cookie w2 check
#    server             web03 172.xxx.xxx.xxx:80 cookie w3 check

backend bk_firefox
    server             web01 172.xxx.xxx.xxx:80
backend bk_chrome
    server             web02 172.xxx.xxx.xxx:80
    
###

systemctl enable --now haproxy # haproxy 재시작