- 발표 : 동영상 만들기
- 진행되었던 스크립드(명령어) 정리
- 보고서 양식 작성
- 각 서버 한명씩 맡아서 작업할 것이다. (정해야함)
- 강사님이 CentOS7Minimal 공유하심 (초기 : Node1752!)
-passwd root
: 비밀번호 변경 (변경 : KOSA123;)
- 기존 폴더에 모든 내용, VM다 지우고 다시설치 (windows 사용자 /.ssh 에 파일 다 지운다.
- 가상머신 가져오기 -> 모든 네트워크 워댑터 새 MAC생성
- 그 후 정해진 이름과 모든 네트워크 어댑터 새 MAC생성으로 VM 들을 복사해준다.
설정
- 어댑터 1: 어댑터의 브릿지
- 어댑터 2: 내부 네트워크
NAT가 중추역할을 한다. 라우터와 DHCP가 분리되어 있을 수 있지만,
실습용으로 서버하나에 여러 역할을 맡은 것이다.먼저 CMD에서 ssh root@~~ 로 접속해준다.
mkdir /root/.ssh
: .ssh폴더를 만들어준다.
exit
: 다시 cmd로 나가줌
ssh-keygen -t rsa
: 키 생성
-Enter file in which to save the key (C:\Users\r2com/.ssh/id_rsa)
: 키 위치 변경? 엔터
Enter passphrase (empty for no passphrase)
: 비밀번호 설정, 엔터
cd %UserProfile%\/.ssh
: .ssh로 이동
scp id_rsa.pub root@192.168.0.95:/root/.ssh/authorized_keys
: 자물쇠를 NAT에게 넘긴다.
ren id_rsa my-key.pem
: id_rsa를 my-key로 이름바꾸기
ssh -i my-key.pem root@192.168.0.95
: NAT에 접속
vi /etc/ssh/sshd_config
: 여기서PasswordAuthentication no
로 바꿔준다. 키를 사용해서 접근하고 암호를 사용하지 않겠다.
-/Pass
로 검색하며 바로 나온다.
systemctl restart sshd
로 새로고침 해준다.
vi /etc/sysconfig/selinux
: SELINUX=disable 시킨다setenforce 0
: reboot없이 바로 disable시키기sestatus
: 입력 후, Current mode가 permissive 여야한다.
- Public Subnet (= 외부, external, frontend)
- 192.168.0.0/24
- 192.168.0.0 ~ 192.168.0.255 ( 256개 IP - 2개 = 254개)
- 192.168.0.0 네트워크 주소(시작 IP)
- 192.168.0.255 브로드캐스팅 주소(마지막 IP)
- Private Subnet (= 내부, internal, backend)
- 172.31.0.0/24
- 172.31.0.0 ~ 172.31.0.255 (256개 IP - 2개 = 254개)
- 172.31.0.0 네트워크 주소(시작 IP)
- 172.31.0.255 브로드캐스틴 주소(마지막 IP)
hostnamectl set-hostname nat
- DNS가 1~2가 있는 이유는, DNS1이 응답이 안될 때, DNS2의 추가 서버가 필요하기 때문이다.
cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s3.bak
: 변경하기 전에 백업해놓기
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
: 랜카드 설정하기
-ggdG
로 내용을 모두 지운다.TYPE=Ethernet BOOTPROTO=none ## 여기를 static으로 줄수도있다. NAME=enp0s3 DEVICE=enp0s3 ONBOOT=yes IPADDR=[IPADDRESS] NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4
vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
: 랜카드 설정하기
- 내부 네트워크를 사용하기 때문에 랜카드는 잡혔지만, 파일이 존재하지 않는다. 따라서 새로 만들어 줘야 한다.
- 내부 네트워크들이 이걸 바라보는 GATEWAY가 되어야 한다.
- type, Bootproto, Device, Onboot, IP주소, Net마스크만 설정한다.
TYPE=Ethernet BOOTPROTO=none NAME=enp0s8 DEVICE=enp0s8 ONBOOT=yes IPADDR=172.31.0.1 NETMASK=255.255.255.0
systemctl restart network
: network를 설정한 후 재부팅해준다.ping google.com
: 해서 ping이 나가는지 확인한다.
firewall-cmd --get-active-zone
: 내가 활성화 한 영역을 보여라
- 현재 랜카드들이 public에 하나로 묶여있다. 우리 Diagram을 보면, 외부, 내부 랜카드들을 나눠야 한다.nmcli c mod enp0s3 connection.zone external
: enp0s3를 external(외부)에 배치시키겠다.nmcli c mod enp0s8 connection.zone internal
: 마찬가지로enp0s8을 internal(내부)에 배치시키겠다.
sysctl -w net.ipv4.ip_forward=1
: ipforward기능을 1(activate, 활성)한다.sysctl -p
: 1로 설정한 위 설정을 저장cat /proc/sys/net/ipv4/ip_forward
: 1로 나오는지 확인한다.
- 통신의 역할이 아닌 IP를 자동으로 부여하기 위함이다.
- 통신의 역할은 방금 설정에서 끝났다.
yum install dhcp -y
: dhcp설치vi /etc/dhcp/dhcpd.conf
: dhcp 설정ddns-update-style interim; subnet 172.31.0.0 netmask 255.255.255.0 { # = 172.31.0.0/24 # 위 정보를 간단히 표현하는 주석이다. option routers 172.31.0.1; ##방금 NAT설정할 떄 internal이었던 enp0s8 (172.31.0.1)의 IP주소를 작성한다. option subnet-mask 255.255.255.0; range dynamic-bootp 172.31.0.100 172.31.0.110; ##부여할 IP주소를 100번부터 110번까지로 제한하겠다. option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 7200; #IP대여시간 max-lease-time 86400; #클라이언트 요청시 최대 대여시간 }
systemctl enable -now dhcpd
: dhcp시작- 각 서버들에 가서 systemctl restart network를 진행하면 ip를 받게 된다.
- ping google.com 으로 ping이 잘 나가는 것을 볼 수 있다.
firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=172.31.0.100
firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=172.31.0.101
firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.31.0.102
firewall-cmd --reload
: 잊지말고 reload 꼭 해줘야 한다.firewall-cmd --list-all --zone=external
: 설정이 잘 됬는지 확인해본다.
- 접속, session -> ssh -> nat머신 IP주소, 사용자 root, ssh 키 my-key.pem으로 설정, 북마크 192.168.0.95(NAT)로 설정 후 시작
각 VM에 키 전송하기- mobaXterm에서 현재 위치가
/root/
임을 확인한다.- 왼쪽 Quick coonect아래 위로 화살표 아이콘이 업로드 아이콘이고, id_rsa.pub을 업로드한다.
ls
명령으로 업로드 확인(실행 안됨 흙흙)ssh-copy-id -i id_rsa.pub
: ssh-copy-id는 ssh키 파일을 전송하기 위한 전용 cp명령어이다.cp authorized_keys authorized_keys.pub
: windows에서 받은 public key를 .pub을 붙혀서 복사한다.ssh-copy-id -i authorized_keys.pub root@172.31.0.100
: 각VM에게 public key보낸다.ssh-copy-id -i authorized_keys.pub root@172.31.0.101
:ssh-copy-id
는 ssh전용cp
명령어이다.ssh-copy-id -i authorized_keys.pub root@172.31.0.102
chmod 400 my-key.pem
ssh -i my-key.pem root@172.31.0.101
- NAT세션을 복제해서 포트 변경, 이름 변경하면 모두 다 접속 되는 것을 볼 수 있다.
hostnamectl set-hostname ~~~
: 로 각각의 호스트이름을 변경한다.
- DNS의 호스트네임을 주로 ds로 사용한다.
- 설정
- 어댑터 1: 내부 네트워크
- 로컬 DNS를 사용할 수 있도록, 내부 네트워크에서만 쓸 수 있는 DNS를 구성해 보자.
yum -y install bind bind-chroot bind-utills
: 기본 도구 설치vi /etc/named.conf
: dns 를 설정한다.
options {
listen-on port 53 { 127.0.0.1; 192.168.0/24; 172.31.0/24; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; 192.168.0/24; 172.31.0/24; };
forwarders { 8.8.8.8; 8.8.4.4; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view "internal" {
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/var/named/cocudeny.shop.zones";
};
vi /var/named/cocudeny.shop.zones
: zones파일을 만든다.
zone "cocudeny.shop" IN {
type master;
file "cocudeny.shop.db";
allow-update { none; };
};
zone "0.31.172.in-addr.arpa" IN {
type master;
file "0.31.172.in-addr.arpa.db";
allow-update { none; };
};
- `vi /var/named/cocudeny.shop.db : DNS설정
$TTL 86400
@ IN SOA cocudeny.shop. root.cocudeny.shop.(
2022040401 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS ns.cocudeny.shop.
IN MX 10 ns.cocudeny.shop.
ns IN A 172.31.0.100 #------- 위 도메인은 우리가 설정하지만, Public cloud에서는 우리가 수정할 수 있는것 A레코드 뿐이다.
web01 IN A 172.31.0.101
web02 IN A 172.31.0.102
vi /var/named/0.31.172.in-addr.arpa.db
: DNS 역방향 설정
$TTL 86400
@ IN SOA cocudeny.shop. root.cocudeny.shop.(
2022040401 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS ns.cocudeny.shop.
100 IN PTR ns.cocudeny.shop. # <- 이곳에서 100은 DNS서버의 IP주소의 마지막 숫자이다.
systemctl start named && systemctl enable named
: named 서버 시작 및 자동시작firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
NAT
vi /etc/dhcp/dhcpd.conf
: option domain-name-servers 172.31.0.100, 8.8.8.8, 8.8.4.4systemctl restart dhcpd
: 리스타트 해준다.vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
- DNS1=172.31.0.100 : DNS1을 ns서버 IP로 바꿔준다.systemctl restart network
: 네트워크 설정이 바뀌었으니 리스타트 해준다.- NAT서버도 reboot해준다.
각 서버들
systemctl restart NetworkManager
cat /etc/resolv.conf
: 해서nameserver
에 172.31.0.100이 나와있는지 확인한다.setenforce 0
: 혹시 selinux가 켜져있다면 꺼놓는다.vi /etc/sysconfig/selinux
- SELINUX=disabled : disabled해준다.
대표적인 레코드
SOA : 다루는 도메인 버전과 업데이트 시간 간격 등의 정보를 저장하는 레코드
A : 호스트 이름으로 IPv4 주소를 조회할 때 사용하는 레코드
예: 호스트 ns.cocudeny.shop의 IPv4 주소는 172.31.0.101
AAAA : 호스트 이름으로 IPv6 주소를 조회할 때 사용하는 레코드
예: jprs.jp의 IPv6 주소는
PTR : IP 주소로 호스트 이름을 조회할 때 사용하는 레코드
예: 172.31.0.130의 호스트 이름은 ns.cocudeny.shop
NS : DNS 서버의 호스트 이름 혹은 IP 주소를 저장하는 레코드
예: cocudeny.shop의 DNS 서버는 ns.cocudeny.shop
MX : 메일 서버 호스트 이름 혹은 IP 주소를 저장하는 레코드
예: cocudeny.shop의 메일 서버는 mail.cocudeny.shop
(메일 교환기, 메일서버를 구축할 때 사용한다.)
CNAME: 호스트 이름의 별칭을 저장하는 레코드
예: www.cocudeny.shop은 ns.cocudeny.shop의 별칭
(도메인을 도메인[별칭, alias]으로 바꿔준다.)
- HAProxy는 여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 애플리케이션을 위한 고가용성 로드 밸런서 및 역방향 프록시를 제공하는 무료 오픈 소스 소프트웨어 입니다.
- C로 작성되었으며 빠르고 효율적(프로세서 및 메모리 사용 측면에서)으로 유명합니다.
- 가용성 : 한 서버에 공격, 부하 등 문제가 생겨 다운되도, 서비스를 계속 이어나갈 수 있는 능력
yum install -y haproxy
: HAproxy설치vi /etc/haproxy/haproxy.cfg
global
daemon
defaults
mode http
frontend http-in
bind *:80
default_backend backend_servers # 여기서 frontend와 backend를 연결해준다.
backend backend_servers # 앞 backend는 frontend와 backend를 구별해주는 부분이고, backend_server는 정의하는 이름이다.
balance roundrobin # balance에서 쓰이는 roundrobin 은 실습용이고, 실무용은 아니다. 그 이유는 한쪽이 쏠려도 똑같이 주기 때문이다. 바쁜 서버에게 적게주고 여유서버에게는 많이주는 다른 방식이 있다.
cookie SVID insert indirect nocache maxlife 3m #3분 고정세션 (stickiness), s(초) 단위로도 줄 수 있다.
server web01 172.31.0.102:80 cookie check # 한 작업이 너무 왔다갔다하지 않게, 처음 온 작업에겐 쿠키를 주어 일정시간 똑같은 서버에게 오게한다.
server web02 172.31.0.100:80 cookie check
systemctl restart haproxy
: 설정을 바꿨으니 리스타트 해준다.systemctl enable --now haproxy
: 시작할때 자동시작에 등록한다.- 이제 서버를 테스트하기위해 두가지 web을 시작한다.
- 설정
- 어댑터 1: 내부 네트워크
- mobaXterm에서 Multi exce에 들어간 후, NAT와 NS서버는 Exclude에 체크해준다.
yum install -y httpd
: httpd설치systemctl enable --now httpd
firewall-cmd --permanent --add-service=http
: 방화벽에 HTTP등록firewall-cmd --reload
: 방화벽 설정 후 새로고침cd /var/www/html/
mkdir images
cd imaegs
yum install wget -y
: 웹쉐어에서 이미지를 얻기 위해 wget설치wget http://192.168.0.63/Files/two-rabbit.jpg
: 웹쉐어 이미지 얻기cd ..
vi index.html
: index 작성한다. 서버 메모장에 위쪽에 있다.
- 위에 방화벽 연것은 WEB01과 WEB02의 방화벽을 연것이고, NAT서버의 방화벽은 열지 않았다.
- NAT에서 방화벽에 등록하고 reload한다.
- 그리고 NAT IP주소로 접속해본다.
- SAMBA 설치
yum install -y samba
: samba 설치mkdir -p /var/samba/share
: samba폴더가 없지만,-p
옵션으로 없는 폴더 만들면서 그 안에 폴더까지 만듬chmod 777 /var/samba/share
: 공유용 폴더기 때문에 777 권한을 부여한다.adduser kosa
,passwd kosa
: kosa계정을 만들고 비밀번호를 설정한다
- PW :kosa0401
smbpasswd -a kosa
: smb(samba) 패스워드 다시 생성
vi /etc/samba/smb.conf
: smb.conf설정
workgroup = 네트워크2 #Global에 넣어준다.
[share] # 맨 아래에 넣어준다.
comment = Share Directory
path = /var/samba/share
browserable = yes
writable = yes
valid users = kosa
create mask = 0777
directory mask = 0777
- smb와 nmb를 enable --now해서 시작과 시작프로그램에 등록해준다.
systemctl enable --now smb
systemctl enable --now nmb
firewall-cmd --permanent --add-servie=samba
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
smb, nmb port 확인ss -ant
: port확인
- 139와 445라고 추정한다.
- smb, nmb라 그런지 두개의 port를 사용한다.
firewall-cmd --permanent --zone=external --add-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.102
firewall-cmd --permanent --zone=external --add-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.102
firewall-cmd --reload
firewall-cmd --list-all --zone=external
: 포트 들어갔는지 확인