[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로 접속가능한 것을 확인할 수 있다
Author And Source
이 문제에 관하여([220413]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@llezi/220413저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)