Networking-Prerequisites

#CKA #Kubernetes #Network

  1. Prerequisite - 네트워크 & IP
  2. Prerequisite - 라우팅
  3. Prerequisite - DNS
  4. Prerequisite - Namespace
  5. Prerequisite - iptables
  6. Prerequisite - SSH 터널링

1. Prerequisite - 네트워크 & IP

네트워크란?

IP는 뭐야?

IP의 구성은?

IP 클래스

서브넷 마스크

서브넷 마스크 문제


2. Prerequisite - 라우팅

통신을 하기 위한 컴포넌트들은 어떤게 있어?

로컬네트워크에서 통신하려면 어떻게 해야해?

외부 네트워크와 통신하려면 어떻게 해야해?


3. Prerequisite - DNS

DNS가 뭐야?

Name Resolution 기능은 뭐야?

DNS 서버가 뭐야?

우리는 PC에서 어떻게 사용하고 있어?

Name Resolution이랑 DNS랑 같이 사용하고 있어?

DNS 형식, 구조는 어떻게 되?

DNS 구조

DomainName을 ip로 바꾸는 규칙, Record

CoreDNS는 뭐야?


4. Prerequisite - Namespace

Namespace가 뭐야?

Network Namespace

ns와 브릿지 그리고 NAT
브릿지를 사이에 둔 ns간의 통신

NS 2개 사이에 브릿지를 두고 통신하도록 구성하면?

# 네임스페이스, 브릿지 생성
> ip netns add ns1
> ip netns add ns2
> ip link add br0 type bridge

# veth peer 생성
> ip link add veth1 type veth peer name veth1-br
> ip link add veth2 type veth peer name veth2-br

# 브릿지와 ns에 veth peer 연결
> ip link set veth1 netns ns1
> ip link set veth2 netns ns2
> ip link set veth1-br master br0
> ip link set veth2-br master br0

# ns veth에 ip 할당 후 인터페이스 활성화
> ip netns exec ns1 ip addr add 192.168.1.10/24 dev veth1
> ip netns exec ns1 ip link set veth1 up
> ip netns exec ns2 ip addr add 192.168.1.20/24 dev veth2
> ip netns exec ns2 ip link set veth2 up

# 브릿지 및 브릿지에 연결된 veth 인터페이스 활성화
> ip link set veth1-br up
> ip link set veth2-br up
> ip link set br0 up

호스트와 NS가 브릿지를 통해서 통신할 수 있도록 설정하면?

> ip netns add ns1
> ip link add br0 type bridge

> ip link add veth1 type veth peer name veth1-br

> ip link set veth1 netns ns1
> ip link set veth1-br master br0

> ip netns exec ns1 ip addr add 192.168.1.10/24 dev veth1
> ip netns exec ns1 ip link set veth1 up

> ip addr add 192.168.1.11/24 dev br0
> ip link set veth1-br up
> ip link set br0 up

ip 명령어

> ip -o link # veth의 peer 정보에 대해 조회
> ip -br link
> netstat -nat | grep LISTEN
> iptables -L | grep FORWARD
> iptables --policy FORWARD ACCEPT

# NAT 및 DNS 셋업 
# /etc/sysctl.conf에서 net.ipv4.ip_forward= 로 볼 수도 있다. 
# 호스트가 호스트와 호스트 사이의 네트워크를 중계해줄 수 없다. 
# default 값이 0으로 되어있는데, 이를 1로 수정해주면 중계가 가능해진다.
> sysctl -w net.ipv4.ip_forward=1 
> cat /proc/sys/net/ipv4/ip_forward 

> iptables -t nat -A POSTROUTING -s 10.201.0.0/24 -j MASQUERADE 
> mkdir -p /etc/netns/container4/ echo 'nameserver 8.8.8.8' > /etc/netns/container4/resolv.conf

5. Prerequisite - iptables

iptables가 뭐야?

iptables는 어떤 식으로 구성되어 있어?

iptables 구조
iptables 옵션들
iptables 명령어 예시

tables 디테일

chains 디테일

SNAT, DNAT, MASQUERADE가 뭐야?

NAT와 PAT
Static / Dynamic NAT
NAT Packet 관찰
로컬 네트워크에 있는 호스트가 인터넷과 통신할 수 있도록 사설 IP를 공인 IP와 매칭해주는 기술

iptables CRUD 명령어

SNAT, DNAT, MASQUERADE 실습
iptables 옵션 및 자주 사용하는 구문

> iptables [-t [테이블]] [기본 명령어] [Chain] [제어옵션 명령어] -j [Target]
# 특정 IP 허용
> iptables -I INPUT -s 210.158.63.128 -j ACCEPT
# MASQUERADE
> iptables -t nat -A POSTROUTING -s 172.17.0.10/24 -o eth0 -j MASQUERADE
# DNAT
> iptables -t nat -A PREROUTING -d 200.200.200.10 -j DNAT --to-destination 172.128.0.11
# 테이블 데이터 삭제
> iptables -F -t nat

IP Forwarding vs. Port Forwarding


6. Prerequisite - SSH 터널링

SSH 아카데미

SSH 터널링이 뭐야?

로컬 SSH 터널링

flowchart LR
	SSH_Client-->SSH_Server
	subgraph Client
	SSH_Client("SSH Client(8888)")
	end
	subgraph Server
		direction BT
		SSH_Server("SSH Server(22)\n1.2.3.4")-->Web_Server("Web Server(8080)\n127.0.0.1")
	end
# [SSH 클라이언트의 N포트로 들어와]:[그럼 웹서버 IP의:N포트로 연결해줄게] [SSH 서버 이름은 이거고@SSH 서버 IP는 이거야]
> ssh -L ([로컬 ip]:)[로컬 포트]:[원격지 ip]:[원격지 포트] [SSH 서버 username]@[SSH 서버 ip]
> ssh -L 8888:127.0.0.1:8080 username@1.2.3.4
flowchart LR
	SSH_Client-->SSH_Server
	subgraph Client
	SSH_Client("SSH Client(8888)")
	end
	subgraph 내부망
		SSH_Server-->Web_Server
		subgraph Bastion
		SSH_Server("SSH Server(8888)\n1.2.3.4")
		end
		subgraph Server
		Web_Server("Web Server(8080)\n192.168.2.2")
		end
	end
# [SSH 서버의 IP와:N포트로 들어와]:[그럼 웹서버 IP의:N포트로 연결해줄게] [SSH 서버의 이름은 이거고@SSH 서버의 IP는 이거야]
> ssh -L 1.2.3.4:8888:192.168.2.2:8080 username@1.2.3.4

리모트 SSH 터널링

리모트 터널링 플로우 이미지 설명

flowchart LR
	SSH_Client-->SSH_Server
	subgraph Gateway
	SSH_Server("SSH Server(8585)\n1.2.3.4")
	end
	subgraph 내부망
		SSH_Client-->Web_Server
		subgraph SSH-Client
		SSH_Client("SSH Client(8888)\n127.0.0.1")
		end
		subgraph Server
		Web_Server("Web Server(8080)\n192.168.2.2")
		end
	end
> ssh -R 1.2.3.4:8585:192.168.2.2:8080 username@1.2.3.4

다이나믹 SSH 터널링

다이나믹 SSH 터널링 설명1
다이나믹 SSH 터널링 이미지

# [SSH 클라이언트의 N포트로 접속하면] [SSH 서버에 연결된 어떤 곳이던 연결해줄게]
> ssh -D 9090 sshd_admin@1.2.3.4