Switching Routing


ip link

์„œ๋กœ ๋‹ค๋ฅธ Host ๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‘ Host ๋ฅผ ์ด์–ด์ฃผ๋Š” Switch ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Host ๋ฅผ Switch ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด Network Interface ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Host ์˜ Network Interface ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Linux ์˜ ๊ฒฝ์šฐ eth0 ๋ผ๋Š” Network Interface ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ip addr
ip addr add 192.168.1.10/24 dev eth0

Host ๋“ค์ด Switch ์— ์—ฐ๊ฒฐ๋œ ์ดํ›„ ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Host ์— IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

ip route
ip route add 192.168.2.0/24 via 192.168.1.1
ip route add default via 192.168.2.1
ip route add 0.0.0.0 via 192.168.2.1

์„œ๋กœ ๋‹ค๋ฅธ Switch ๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‘ Switch ๋ฅผ ์ด์–ด์ฃผ๋Š” Router ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 192.168.2.0/24 ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋Š” Switch ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„  Router ์˜ 192.168.1.1 ์ฃผ์†Œ๋ฅผ ๊ฑฐ์ณ๊ฐ€๋ฉด ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. default ๋˜๋Š” 0.0.0.0 ๋Š” ์ด์™ธ ๋ชจ๋“  ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ฆ‰, ์ธํ„ฐ๋„ท์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„  192.168.2.1 ์ฃผ์†Œ๋ฅผ ๊ฑฐ์ณ๊ฐ€์•ผ ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward

Router ๊ฐ€ 192.168.1.1 ์™€ 192.168.2.1 ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ eth0 ๊ณผ eth1 ์ด ํ• ๋‹น๋๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ Network Interface ๊ฐ„์— Packet ์ „๋‹ฌ์€ ๋ง‰ํ˜€์žˆ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ip_forward ๊ฐ’์„ 1 ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด Router ๋‚ด๋ถ€์—์„œ Packet ๋ฅผ Network Interface ๊ฐ„์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์žฌ๋ถ€ํŒ…ํ•  ๊ฒฝ์šฐ ์„ค์ •๊ฐ’์ด ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— /etc/sysctl.conf ์—์„œ net.ipv4.ip_forward ๊ฐ’์„ 1 ๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ์˜๊ตฌ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

DNS


cat /etc/hosts

IP ์ฃผ์†Œ ๋Œ€์‹  Name ์œผ๋กœ Host ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์œ„ ๊ฒฝ๋กœ์— IP ์ฃผ์†Œ์— ํ•ด๋‹นํ•˜๋Š” Host Name ์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์‹  ๋ชจ๋“  Host ์— ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ๋•Œ๋ฌธ์— DNS ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•ด ํ•˜๋‚˜์˜ ๊ด€๋ฆฌํฌ์ธํŠธ๋กœ ํ†ตํ•ฉํ•œ๋‹ค.

cat /etc/resolv.conf

DNS ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” ์œ„ ๊ฒฝ๋กœ์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 8.8.8.8 ์€ Google ์ด ์ œ๊ณตํ•˜๋Š” DNS ์„œ๋ฒ„๋‹ค.

cat /etc/nsswitch.conf

...
hosts: files dns
...

๊ธฐ๋ณธ์ ์œผ๋กœ /etc/hosts ์—์„œ ์ฃผ์†Œ๋ฅผ ์ฐพ๊ณ  ์—†์œผ๋ฉด /etc/resolv.conf ์—์„œ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋ฐ, ์œ„ ์„ค์ •ํŒŒ์ผ์—์„œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

CoreDNS


wget https://github.com/coredns/coredns/releases/download/v1.7.0/coredns_1.7.0_linux_amd64.tgz

cat > /etc/hosts
192.168.1.10    web
192.168.1.11    db
192.168.1.15    web-1
192.168.1.16    db-1
192.168.1.21    web-2
192.168.1.22    db-2

DNS ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด DNS ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์„ค์น˜๋œ Host ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. CoreDNS ๋ผ๋Š” DNS ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜์—ฌ DNS ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

Network Namespaces


ip netns add red
ip netns add blue

Container ๊ฐ€ namespace ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋“ฏ Network ์—ญ์‹œ ๊ฒฉ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋Š” red ์™€ blue ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ Network Namespace ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

ip netns exec red ip link
ip -n red link

ip link ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Network Interface ๋ฅผ ํ™•์ธํ–ˆ๋“ฏ Network Namespace ์˜ Network Interface ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„  ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ip -n red arp
ip -n red route

arp ์™€ route ์—ญ์‹œ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Virtual Cable

ip link add veth-red type veth peer name veth-blue

์œ„ ๋ช…๋ น์–ด๋กœ ๊ฐ€์ƒ ์ผ€์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ ,

ip link set veth-red netns red
ip link set veth-blue netns blue

ip -n red addr add 192.168.15.1/24 dev veth-red
ip -n blue addr add 192.168.15.2/24 dev veth-blue

ip -n red link set veth-red up
ip -n blue link set veth-blue up

์œ„ ๋ช…๋ น์–ด๋กœ Network Namespace ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

Linux Bridge

ip link add v-net-0 type bridge
ip link set dev v-net-0 up

Network Namespace ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ Switch ์—ญํ• ์„ ํ•˜๋Š” Linux Bridge ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ip link add veth-red type veth peer name veth-red-br
ip link set veth-red netns red
ip link set veth-red-br master v-net-0

ip -n red addr add 192.168.15.1 dev veth-red
ip -n red link set veth-red up

์ดํ›„ Network Namespace ์™€ Bridge ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Virtual Cable ์„ ์ƒ์„ฑ ๋ฐ ํ• ๋‹นํ•ด์ฃผ๊ณ , IP ์ฃผ์†Œ ๋„ ํ• ๋‹นํ•ด ์ค€ ๋’ค ํ™œ์„ฑํ™” ํ•ด์ฃผ์ž.

ip addr add 192.168.15.5/24 dev v-net-0

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Host ์™€ Bridge ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ์ž.

ip netns exec blue ip route add 192.168.1.0/24 via 192.168.15.5

Namespace ๊ฐ€ ์™ธ๋ถ€ Host ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์™ธ๋ถ€์— 192.168.1.0/24 ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋Š” Switch ์™€ routing ์„ค์ •์„ ํ•ด์ค˜์•ผํ•œ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 192.168.15.5 ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋Š” v-net-0 ์„ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ์˜ eth0 ๋ฅผ ๊ฑฐ์ณ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๊ฒŒ ๋œ๋‹ค.

iptables -t nat -A PREROUTING --dport 80 --to-destination 192.168.15.2:80 -j DNAT

์™ธ๋ถ€ Host ๊ฐ€ ๋‹ค๋ฅธ Host ์˜ Network Namespace ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„  ์œ„ ๋ช…๋ น์–ด๋กœ ํฌํŠธํฌ์›Œ๋”ฉ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Docker Networking


ip link

08. Docker Networking ์—์„œ ๋ฐฐ์šด bridge ๊ฐ€ ๋ฐ”๋กœ Linux Bridge ๋‹ค. ip link ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด docker0 ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ Network Interface ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ip netns

Docker Container ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Network Namespace ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

iptables -nvL -t nat

ํฌํŠธํฌ์›Œ๋”ฉ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€. Docker Container ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ iptable ์„ค์ •๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

์ฆ‰, Docker Container ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ๋„คํŠธ์›Œํฌ ์ธก๋ฉด์—์„  ๋‚ด๋ถ€์ ์œผ๋ก  ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ์ž‘์—…๋“ค์ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜๋˜ ๊ฒƒ์ด๋‹คโ€ฆ

CNI


Cluster Networking


References