[220413]

[실습]

라우터들은 다 게이트웨이들이다
오늘은 이 라우터(NAT G/W)를 설정할 것이다

VM 생성

NAT게이트웨이, DHCP, HAproxy역할을 할 가상머신을 만든다
HAproxy용 VM은 랜카드가 두 개 필요함

NAT GW_DHCP_HAproxy 생성

어댑터 2는 내부네트워크로 설정한 후 이름은 vSwitch로 변경한다

WEB01 SAMBA 생성

HAproxy를 복사해서 WEB01 SAMBA 가상머신을 만든다
이 때 완전한 복제를 해준다

랜카드는 하나만 사용할 것이기에 어댑터2는 비활성화한다

어댑터1 -> 내부네트워크를 설정하고 vSwitch에 연결한다
가상 스위치와 WEB01 SAMBA가 연결된 것이다

WEB02 NFS 생성

HAproxy나 WEB01 SAMBA를 복사해서 WEB02 NFS 가상머신을 만든다
네트워크도 WEB01 SAMBA과 같게 설정해준다

DB_DNS 생성

같은 방법으로 DB_DNS 가상머신을 만든다


그룹화 해준 후 이름을 MY-NETWORK로 설정한다
이제 클릭 한 번 그룹 내의VM을 모두 켤 수 있다

모든 VM이 vSwitch에 연결되었기 때문에 NAT GW_DHCP_HAproxy서버가 세팅되지 않으면 세 개의 서버도 통신이 불가능하다
즉, NAT GW_DHCP_HAproxy는 공유기로 기능한다

세팅


NAT GW_DHCP_HAproxy 를 제외하고는 ip를 부여받지 못한 것을 볼 수 있다
서버의 IP는 고정되어야 하기 때문에 설정해줘야한다


윈도우의 ip를 고정으로 한다면
IP주소의 네 개의 구역 중 앞의 세개는 네트워크 마지막은 포트
서브넷마스크는 255개가 채워질 수 있다는 것
게이트웨이는 라우터의 주소가 1번인 것

(자동이라면 ip가 1~2시간마다 변경됨)

하지만 리눅스의 IP고정은 더 복잡하다
NAT gateway는 key pair로 통신할 수 있게 설정해준다
host에서 관리자 권한으로 명령 프롬프트를 켜고 NAT GW_DHCP_HAproxy에 접속한다

root에 .ssh폴더를 만들어준다
이미 있기에 만들어지지 않는다
exit을 입력해 접속을 해제한다

key만을 가지고 접속할 것이기 때문에 어떤 패스워드도 설정하지 않는다

.ssh 폴더에 프라이빗, 퍼블릭키가 생성되었다


ren id_rsa my-key.pem 명령어를 이용해 id_rsa의 이름을 바꿔준다

NAT GW_DHCP_HAproxy 서버에 퍼블릭키를 보낸다

이제 키를 이용해 암호 없이 NAT GW_DHCP_HAproxy서버에 접속 가능하다


vi /etc/ssh/sshd_config를 입력해 파일을 열고 PasswordAuthentication 값을 yes에서 no로 변경해 암호화 방식을 사용할 수 없게 바꿔준다


port도 22에서 2222로 바꿔준다

port번호를 바꾸었을 때 selinux가 가동되어 실행되지 않는다
selinux를 ::임시적으로 껐을 때 잘 작동되는 것을 확인하였다

vi /etc/sysconfig/selinux를 입력해 selinux의 파일을 열고 영구적으로 꺼준다


ss-ant로 열려있는 포트를 확인했을 때 아직 22번으로 NATgateway와 통신중인 것을 알 수 있다


NATgateway ip : 포트번호 클라이언트(?) ip : 클라이언트 포트

well-known 알려진 포트번호 : 0 ~ 1024 (서버 포트)
unknown 알려지지 않은 포트 : 1025 ~ 65535 (클라이언트 포트)
서버포트는 바뀌지 않지만 클라이언트는 접속할 때마다 랜덤

연결을 끊고 다시 접속했을 때 포트번호로 인해 접근이 불가능하다

-p 옵션을 이용해 디폴트포트에서 2222로 바꿔서 접근한다

하지만 방화벽을 닫힌 상태로 접속을 하려고 해서 접근이 불가능하다..
방화벽을 열려면 접속을 해야한다
이러면 안됨! 앞으로는 방화벽을 열어준 후 접근을 해제하자

어쩔 수 없이 NAT GW_DHCP_HAproxy로 가서 직접 방화벽을 설정해준다



#firewall-cmd --permanent --add-port=2222/tcp
#firewall-cmd --reload
#firewall-cmd --list-all

2222포트가 열린 것을 볼 수 있다

다시 원격에서 접근 가능한 것을 볼 수 있다

이후 혼란을 방지하기 위해 NAT GW_DHCP_HAproxy의 sshd_config파일에서 포트번호를 원복하고 주석처리해준다

sshd를 restart하여 sshd_config를 적용해준다

호스트에서 패스워드 방식으로 접속이 불가능한지도 확인한다
앞으로 NAT GW_DHCP_HAproxy는 키페어로만 접속이 가능하다
또한 NAT GW_DHCP_HAproxy 내부 네트워크의 서버들(격리네트워크) 역시 NAT GW_DHCP_HAproxy에 접속한 상태로만 접속 가능하다

Host에서 NAT에 파일 업로드 / 다운로드

host에서 nat에 접속한 후 root 폴더에 hello.txt를 보내는 명령어

nat에서 파일을 내려받기 위해 hello.txt를 지운다

nat에 보낸 nat서버에 hello.txt 파일을 현재 경로에 내려받는다

Host에서 NAT에 폴더 업로드 / 다운로드

test-folder라는 폴더를 만들고 hello.txt 파일을 copy한다

#scp -i my-key.pem -r test-folder [email protected]:/root/
명령어를 이용해 nat서버의 root에 test-folder 폴더를 올려준다

nat 서버의 root에 해당 폴더가 업로드 된 것을 볼 수 있다

NAT GW_DHCP_HAproxy 세팅

NAT GW_DHCP_HAproxy를 통해 private subnet과 public subnet이 연결된다
private 에 대한 네트워크 범위를 세팅해줘야한다
public (바깥쪽)은 이미 강의실 네트워크인 192.168.0.X/24로 세팅이 되어 있다
(현재는 사설로 되어있지만 클라우드는 공인IP로 세팅될 것이기에 공인IP로 가정한다. 원래 공인IP는 구매해야 함)

호스트 이름 바꾸기

#hostnamectl set-hostname nat
명령어로 localhost에서 nat로 이름을 바꿔준다

세션을 끊고 다시 접속해야 바뀐다


재접속 시 호스트 이름이 바뀐 것을 볼 수 있다

NAT GW_DHCP_HAproxy의 랜카드에 고정 IP 세팅

사설 IP의 범위
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

!! 전면부와 후면부는 다른 ip범위를 사용해야 한다
이에 따라 NAT GW의 전면부ip와 후면부ip를 다음과 같이 설정한다

전면부 : 192.X (랜카드-enp0s3) - 외부네트워크 / public subnet / frontend
후면부 : 172.X (랜카드-enp0s8) - 내부네트워크 / private subnet / backend

  • 내부 VM들이 바라보는 NAT GW의 안쪽 랜카드

전면부 (enp0s3 / public subnet)의 고정 IP를 세팅해준다

cd /etc/sysconfig/network-scripts 폴더로 들어간다

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 로 ifcfg-enp0s3파일을 연다

변경
BOOTPROTO="dhcp" -> none으로 변경 (자동 IP주소 받기를 취소하는 것)
추가
IPADDR=192.168.0.94 (nat의 ip 192.168.0.94)
NETMK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8 (구글 DNS)
DNS2=8.8.4.4

네트워크를 restart해준다

ping이 잘 나가는 것도 확인한다

후면부 (enp0s8 / private subnet)의 IP를 고정한다

public에서 192.X를 고정했으니 private에서는 10.X나 172.31.0.0/24로 써준다
지금은 172.31.0.0/24를 쓸 것이다

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 로 파일을 새로 만들고 위의 내용을 저장한다

네트워크를 다시 restart해준다

ip 가 생성된 것을 확인할 수 있다

랜카드 분리

NAT GW_DHCP_HAproxy 의 public 영역 안에 랜카드가 두 개 있다
내부/외부 랜카드 역할을 나누기 위해 이 두개를 구분해야한다
컴퓨터로 내외부 랜카드를 구분하기 위해서는 external, internal표현만 사용가능하다 (public, frontend 등의 표현은 사람이 사용하는 것)

#nmcli c mod enp0s3 connection.zone external
#nmcli c mod enp0s8 connection.zone internal

_*nm:network manager

다시 확인하니 internal과 external 인터페이스가 구분되었다

리눅스 시스템을 라우터로 만들기

#sysctl -w net.ipv4.ip_forward=1

위의 명령어는 리눅스 시스템을 라우터로 만드는 세팅이다
ip를 넘겨주도록 (forward, 잘넘어가도록 경로 설정) 하는 기능을 활성화(1로 설정)

ip_forward가 1인 것을 확인 가능하다
확인했을 때 0이라면 1로 바꿔줘야한다

외부/내부 구분되었기 때문에 앞으로는 방화벽에 추가할 때 명시해주어야한다
ex) firewall-cmd --zone=external --permanent --add-service=dns

DHCP서버에 dhcp 설치하기

DHCP 세팅

MAC주소를 기반으로 DHCP서버에게 ip를
가져오는 것

  • 클라이언트가 DHCP서버에게 요청
  • DHCP가 클라이언트에게 ip를 임대(할당)

DHCP 세팅에 대한 설명

#vi /etc/dhcp/dhcpd.conf 명령어로 dhcpd.conf 파일 열기

ddns-update-style interim;
subnet 172.31.0.0 netmask 255.255.255.0 {

# 172.31.0.0/24 라고도 표현 가능
# /24는 255.255.255.0 와 같은 의미이다 256개의 ip사용 가능

option routers 172.31.0.1; # 내부 서버들이 바라보는 내부네트워크 랜카드 ip
option subnet-mask 255.255.255.0;

range dynamic-bootp 172.31.0.2 172.31.0.254;

# 2 ~254까지의 ip를 사용하겠다고 범위 정하기 
# 0번은 네트워크ip, 1번은 라우터(게이트웨이)가 사용 중, 255는 브로드캐스팅ip
# range dynamic-bootp 172.31.0.100 172.31.0.254; 이런 식으로 사용할 ip 범위를 줄여서 부하 줄일 수 있음 

option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 7200;

# 임대시간은 2시간, 2시간 지나면 다시 요청해야함
# 재요청 시 사용하던ip가 다른 클라이언트에 의해 사용 중이지 않다면 ip 바뀌지 않음
# 공공장소에서는 ip가 부족해서 자주 lease-time을 길게 설정하지 않는다
# 집에서는 ip가 부족하지 않으니 ip바뀔 가능성이 적고 lease-time을 길게 줘도 된다

max-lease-time 86400;

# 사용자가 특정 ip를 특정 시간만큼 쓰겠다고 요청한 경우 최대 사용 가능한 86400초(하루)
# max-lease-time이 넘어가는 요청은 거절

}

WEB01 SAMBA가 ip를 부여받고 ping이 잘 나가는 것을 확인할 수 있다

추후 실습을 위해 내부 네부워크 서버의 ip를 정리해둔다
(실습 환경이 변하면 바뀐다)

  • WEB01 SAMBA : 172.31.0.2
  • WEB02 NFS : 172.31.0.3
  • DB_DNS : 172.31.0.4

mobaxterm

다운로드 및 설정

xshell, putty 등과 같이 터미널 접속을 쉽게 해주는 터미널 도구이다

설치없이 바로 실행 가능한 portable 버젼을 다운로드한다

  • Sessions 선택
  • Remote host : 접속할 서버의 ip를 입력한다
  • Specify username : 접속할 서버의 user를 입력한다
  • Use private key : 서버의 private key를 넣어준다

NAT gateway에 접속했다

4개의 세션이 필요하므로 3개를 복사해준다
(NAT / WEB01 SAMBA / WEB02 NFS / DB_DNS)

두 번째 세션에서 WEB01 SAMBA에 접속한다

호스트네임을 web01로 바꾸고 재접속하여 변경되었는지 확인한다

위와 같은 방법으로 세번째, 네번째 세션은 WEB02 NFS는 web02, DB_DNS는 ns로 호스트네임을 바꿔준다

내부 네트워크의 서버에게 public key 전송하기

내부 네트워크의 서버들도 key방식으로 접근할 수 있도록 public key를 보내준다

nat서버의 /root/.ssh 폴더에 있는 authorized_keys를 세 개의 서버에게 전송해야 한다

authorized_keys를 authorized_keys.pub으로 복사한다

복사된 public key를 web01(172.31.0.2)로 보낸다

이후 web02와 ns에도 같은 방법으로 key를 전송한다

key로 내부 네트워크에 접속해보기

nat서버에 private key가 있어야 내부네트워크에 key로 접속할 수 있다

현재 private key인 my-key.pem은 host 디바이스에 저장되어있다
nat서버의 .ssh폴더에 private key인 my-key.pem 을 업로드해준다

업로드 된 것 확인

key가 잘못되어 패스워드를 치고 접속하는 방식이 나타났다
-> trouble shooting 2

Trouble Shooting

(1) DHCP 설정 후 통신이 불가능한 상태

DHCP를 설정한 후 WEB01에서 통신을 확인했다
ip는 부여받았지만 ping google.com을 입력했을 때 작동하지 않았다

ip는 정상적으로 받았으니 라우터를 확인해본다
NAT_DHCP서버를 확인해보니 라우터 설정이 꺼져있다

라우터 설정을 다시 켜준다

dhcpd를 restart한다

WEB01 SAMBA에서 ping이 잘 나가는 것을 확인할 수 있다

(2) key permission error

key가 잘못되어 패스워드를 치고 접속하는 방식이 나타났다

my-key의 permssion 에러
권한이 너무 높은 key는 key로 사용할 수 없다
그룹과 기타 사용자는 아무 권한이 없도록 permission을 낮춰줘야 한다

r만 가능한 400 권한으로 바꿔준다 (400, 600 중 선택)

다시 my-key로 접속가능한 것을 확인할 수 있다

좋은 웹페이지 즐겨찾기