Linux Network

Table of Contents

네트워크

용어

  • LAN (Local Address Network)
  • ARP (Address Resolution Protocol) : IP와 MAC를 매치하기 위한 프로토콜
  • NDP (Neighbor Discover Protocol) : 이웃 탐색 프로토콜, 동일 네트워크 내 접속된 노드간의 관계를 판단하는 방법을 제공

Network Layer

  • L2 (Data Link layer) : Mac
  • L3 (Network layer), : IP
  • L4 (Transport layer) : IP + Port
  • L7 (Application layer) : IP + Port + 패킷

호스트명 변경

  • hostnamectl
▒  hostnamectl set-hostname "cb-k8s-master" && exec bash
  • Linux reboot 명령이 hang 걸렸을 경우 대처 방법 원본
▒ echo 1 > /proc/sys/kernel/sysrq
▒ echo b > /proc/sysrq-trigger

도메인 점검

  • nslookup : DNS 서버에 질의하여, 도메인의 정보를 조회 하는 명령어

  • IP로 도메인 찾기

▒ nslookup 209.132.183.181
  • 특정 DNS (8.8.8.8 google)를 사용하여 도메인 검색
▒ nslookup redhat.com 8.8.8.8

원격서버 포트 점검

nc (network cat)

▒ nc -z 8.8.8.8 53

nmap

▒ nmap localhost
▒ nmap ko.wikipedia.org -p 80

로컬 포트 점검

losf

  • https://zetawiki.com/wiki/리눅스_lsof
  • “List Open Files” 시스템에서 열려있는 파일에 대한 정보를 출력
▒ lsof -i -nP | grep LISTEN | awk '{print $(NF-1)" "$1}' | sort -u
  • 특정 포트를 사용하는 프로세스 정보 보기
▒ lsof -i TCP:22
  • 특정 명령어가 사용하는 포트
▒ lsof -c httpd

netstat

  • https://zetawiki.com/wiki/리눅스_netstat
▒ netstat -tnlp

ip

  • link : 모든 네트워크 인터페이스 관리하고 출력
  • address : ip 주소 관리하고 출력
  • route : 라우팅 테이블을 관리하고 출력
  • maddr : 멀티 캐스트 ip를 관리하고 출력
  • neigh : ARP, NDP 관리하고 출력
▒ ip link set eth0 up                                     # eth0 인터페이스 활성화
▒ ip link set eth0 down                                   # eth0 인터페이스 비활성화

ip addr

▒ ip addr show                                            # ip 정보 출력
▒ ip addr add 192.168.5.10/24 dev eth0                    # eth0 인터페이스에 ip 설정
▒ ip addr del 192.168.5.10/24 dev eth0                    # eth0 인터페이스의 ip 삭제

ip route

▒ ip route                                                        # 라우팅 테이블  출력
▒ ip route show                                                   # 라우팅 정보 출력
▒ ip route add default via 192.168.5.1                            # 게이트웨이 설정
▒ ip route del default via 192.168.5.1                            # 게이트웨이 삭제
▒ ip route add 10.20.12.0/24 via 192.168.5.1 dev eth0             # 정적 라우팅 정보 설정
▒ ip route get 8.8.8.8                                            # 라우팅 경로 출력 
▒ ip -o route get 8.8.8.8 | sed -e 's/^.* src \([^ ]*\) .*$/\1/'  # 라우팅 경로 source 출력
▒ ip -o route get 8.8.8.8 | awk '{ print $5; exit }'              # 라우팅 경로 network interface 출력
▒ ip route del 10.20.12.0/24                                      # 정적 라우팅 정보 삭제

route

  • Routing 테이블 출력
▒ route -n
▒ netstat -rn
  • 추가
    • route add 명령으로 route table에 rule 추가 가능
    • 재부팅시 reset, 재부팅시에도 반영되도록 하는 방법은 리눅스 계열별로 참조
▒ route add default gw 192.168.1.254 eth0                             # default gateway 추가
▒ route add default gw 192.168.1.254 netmask 255.255.255.0 dev eth0   # network-interface  gateway 추가
▒ route add -net 111.222.33.44 netmask 255.255.255.255 dev eth0	      # 111.222.33.44 요청 eth0 로 응답
▒ route add -net 111.222.33.0 netmask 255.255.255.0 dev eth0          # 111.222.33.* 요청 eth0 로 응답
  • 삭제
▒ route del default gw 192.168.1.254                              # gateway 삭제
▒ route del -net 111.222.33.44 netmask 255.255.255.255 dev eth0   # routing 삭제
  • 참고 : traceroute (routing trace)
▒ apt-get install traceroute              # 설치

▒ traceroute 10.90.1.11 # routing trace

iptable

  • Chain

    • PREROUTING :외부로부터 들어오는 트래픽
    • POSTROUTING :외부로 나가는 트래픽
    • INPUT : 로컬 프로세스로 들어오는 트래픽
    • OUTPUT : 로컬에서 발생해 외부로 나가는 트래픽
    • FORWARD : 경유하는 트래픽 (로컬 프로세스를 거치지 않는)

iptable chain

  • 조회
▒ iptables -nL -t nat               # 조회
▒ iptables -nL PREROUTING -t nat    # DNAT 조회 
▒ iptables -nL POSTROUTING -t nat   # SNAT 조회
  • 삭제
▒ iptables -nL POSTROUTING -t nat  --line-number
▒ iptables -t nat -D POSTROUTING 7                   # 7은 라인번호(num)
  • Rule
    • -A : 체인의 가장 마지막에 룰을 추가
    • -I : 룰 순서 설정, 입력하지 않으면 1(가장 처음)에 추가

Use cases

  • outbound 패킷 source-ip 변환
▒ iptables -t nat -A POSTROUTING -o eth0:1  -j SNAT --to 172.10.0.92             # I/F eth0:1  outbound 패킷  Source를 '172.10.0.92'로 변환
▒ iptables -t nat -A POSTROUTING -d 10.244.1.5 -j SNAT --to-source 172.10.0.92   # IP '10.244.1.5' outbound 패킷 Source를 '172.10.0.92'로 변환
  • 125.131.213.4:80로 들어오는 패킷을 81 포트로 라우팅
    • 외부에서 들어오는 패킷 (PREROUTING)과 로컬 발생 패킷(OUTPUT) 을 동시에 지정
▒ iptables -A PREROUTING -t nat -j DNAT -p tcp -d 125.131.213.4 --dport 80 --to-destination 125.131.213.4:81
▒ iptables -A OUTPUT -t nat -j DNAT -p tcp -d 125.131.213.4 --dport 80 --to-destination 125.131.213.4:81
  • I/F eth080포트로 들어오는 패킷을 81 포트로 라우팅 (DNAT 대신 REDIRECT 활용하는 방법)
    • dhcp 처럼 dynamic IP 환경에서 활용가능
▒ iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 81
  • 로컬 패킷 허용/제거
▒ iptables -A INPUT -s 172.10.0.92 -j DROP        # inbound 패킷 제거
▒ iptables -A OUTPUT -d 172.10.0.92 -j DROP       # outbound 제거
▒ iptables -A INPUT -p tcp --dport 81 -j ACCEPT   # inbound 패킷 허용 (tcp/81)
  • 로컬 프로세스 outbound 패킷 변경
▒ iptables -t nat -I OUTPUT --src 54.238.87.186 --dst 18.180.118.194 -p tcp --dport 8080 -j REDIRECT --to-ports 8080  # 로컬 8080 포트로 redirect.
▒ iptables -t nat -A OUTPUT -d 18.180.118.194 -j DNAT --to-destination 172.10.0.134                                   # destination IP 변경

tcpdump

packet dump

  • ping으로 source-ip, destination-ip 확인 가능
▒ tcpdump icmp -n
▒ tcpdump -i eth0
▒ tcpdump src 10.244.191.1 and dst 10.244.61.65
▒ tcpdump src 10.244.191.1 and port 80 and dst 10.244.61.65
  • if eth0 를 통해 source-ip “172.10.0.191” 에서 destionation-ip “54.248.191.2” 8080 포트로 가는 패킷 덤프
▒ tcpdump -i eth0 src 172.10.0.191 and port 8080 and dst 54.248.191.23

퍼블릭 아이피

▒ yum install -y bind-utils   # 설치

▒ dig +short myip.opendns.com @resolver1.opendns.com
▒ curl ifconfig.me

IP alias

  • 활성화
▒ yum install -y net-tools    # 설치

▒ ifconfig eth0:1 $(dig +short myip.opendns.com @resolver1.opendns.com) up
  • 비활성화
▒ ifconfig eth0:1 down
▒ ip addr

posted at 2022/03/18 09:42