[리눅스마스터 1급] 이기적 이론서 4회차 정리 - 네트워크2
🏁 이기적 이론서 학습 범위
- PART 01 리눅스 실무적 이해
- CHAPTER 02 네트워크의 이해
네트워크의 설정
☑️ 환경설정
리눅스 네트워크 환경설정
- 리눅스 네트워크의 호환성
- 리눅스 배포판에서 운영하고 있는 사이트를 참조하여 네트워크 디바이스의 호환성을 확인한다.
- 리눅스 네트워크의 다양성
- 리눅스는 기본적으로 다양한 네트워크 프로토콜과 네트워크 디바이스를 제공한다.
- ethernet, ppp. slip, x.25, atm, wlan, can, fddi, bluetooth, zigbee, 6lowpan 등
- 리눅스에서 제공하지 않는 네트워크 디바이스는 호환되는 모듈 파일을 다운 받아 설치한다.
- 리눅스는 기본적으로 다양한 네트워크 프로토콜과 네트워크 디바이스를 제공한다.
이더넷 카드 설치
- 대부분은 리눅스 배포판에 포함되어 있다.
- 최신 이더넷 카드의 경우, 제소사 사이트에서 다운로드 받아 설치한다.
- 드라이버 다운 후 modprobe나 insmod로 드라이버를 시스템에 로드해야 한다.
- 시스템 재부팅 시 드라이버가 자동 로드되도록 /etc/modprobe.d 디렉터리 설정이 필요하다.
- 인터넷 접속을 위한 네트워크 인터페이스 설정
- GUI 기반 네트워크 설정 : 이기적 이론서 p.183 참조
- 텍스트 기반 네트워크 설정 : 이기적 이론서 p.185 참조
명령어를 통한 IP 수동 설정
ifconfig ens33 192.168.100.100 # ens33 인터페이스에 IP 주소 설정 (넷마스코와 브로드케스트 주소는 기본 설정 ifconfig ens33 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255 # 넷마스크, 브로드캐스트 주소 함께 입력 ifconfig ens33 192.168.100.100/24 # 접두어 길이 표기법으로 입력 ifconfig ens33 up # 네트워크 통신을 위해 네트워크 인터페이스 활성화 service network restart # 네트워크 재시작시 수동 설정값은 지워짐 route add default gw 192.168.100.1 # 네트워크 외부로 패킷 전송을 위해 라우팅 테이블에 게이트웨이 주소 추가
- 네트워크 설정 파일을 통한 IP 수동 설정
- 네트워크 설정파일에서 IP 주소, 넷마스크, 게이트웨이 주소, 호스트이름, DBS 등의 설정을 수행한다.
설정 변경 후
systemctl restart network
를 실행하여 서비스를 재시작해야 한다.네트워크 설정 파일 설명 /etc/sysconfig/network-scripts/ifclg-ens33
네트워크 인터페이스마다 환경설정을 수행할 수 있다.
디바이스명, 프로토콜, IP 주소, 넷마스크, 게이트웨이, DNS 주소, 부팅 시 활성화 여부 등 다양한 IP 설정을 수행한다./etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network
시스템 전체에 적용할 기본 게이트웨이 주소, 호스트명, 네트워크 연결 허용 여부, 게이트웨이 장치 파일 설정, NIS 도메인 이름을 설정한다. /etc/resolv.conf
네임 서버 설정과 기본으로 사용할 도메인명을 설정한다. (search / nameserver) /etc/hosts
IP 주소와 도메인 이름 간의 매핑 테이블로, 해당 시스템에서만 사용하는 정보를 미리 입력한다.
☑️ 네트워크 설정 명령어
ifconfig
- 역할
- 네트워크 인터페이스에 대한 환경설정을 수행한다.
- 아무 옵션 없이 사용 시, 현재 활성화된 네트워크 인터페이스에 대한 정보를 보여준다.
- ifconfig 명령어가 탑재되어 있지 않다면
yum install net-tools
로 관련 패키지를 설치해야 한다.
형식
ifconfig [interface] ifconfig interface options | address ...
-a
옵션- 모든 네트워크 인터페이스에 대한 설명을 보여준다.
$ ifconfig -a
- 특정 네트워크 인터페이스의 설정 보기
- 옵션으로 네트워크 인터페이스명을 주면 해당 인터페이스에 대한 설명만 보여준다.
$ ifconfig eth0
- 특정 네트워크 인터페이스 (비)활성화하기
- 네트워크 인터페이스 비활성화 시, 아무런 데이터가 송수신되지 않는다.
네트워크 인터페이스 up
을 사용해서 활성화한다.
$ ifconfig eth0 up
네트워크 인터페이스 down
을 사용해서 비활성화한다.
$ ifconfig eth0 down
- 네트워크 설정하기
- 고정 IP를 설정하려면
인터페이스 이름 IP 주소
를 입력한다.
$ ifconfig wlan0 192.168.100.100
netmask
로 넷마스크를 설정한다.
$ ifconfig wlan0 netmask 255.255.255.0
broadcast
로 브로드캐스트 주소를 설정한다.
$ ifconfig wlan0 broadcast 192.168.100.253
- IP 주소, 넷마스크, 브로드캐스트 주소를 한 번에 변경 가능하다.
$ ifconfig wlan0 192.168.100.253 netmask 255.255.255.0 broadcast 192.168.100.253
- IP 주소, 넷마스크, 브로드캐스트 주소를 한 번에 변경하면서 인터페이스를 활성화한다.
$ ifconfig wlan0 192.168.100.253 netmask 255.255.255.0 broadcast 192.168.100.253 up
- 고정 IP를 설정하려면
nmcli
- 역할
- Network Manager를 실행하고 ‘Edit a connection’을 선택한다.
형식
nmcli [OPTIONS] OBJECT { COMMAND | help }
Network Manager 정보 출력하기
$ nmcli g
- 네트워크 장치목록 출력하기
device
를 줄여서d
라고 할 수 있다.
$ nmcli device
-f
으로 원하는 필드만 출력한다.
$ nmcli -f DEVICE.IP4-CONNECTIVITY d
- 네트워크 연결하기
- 현재 활성화된 연결을 출력한다.
connection
을 줄여서c
라고 할 수 있다.
$ nmcli connection
-f all
입력 시 모든 필드를 출력한다.
$ nmcli -f all c
- 지정한 네트워크 장치를 IP 자동 설정하고 부팅 시 자동 연결하도록 설정한다.
m
은modify
이고, ens33 은 네트워크 장치다.- IP를 자동 설정하기 위해
ipv4.method
를auto
로 설정하고, 부팅 시 자동 연결하도록connection.autoconnect
를yes
로 설정한다.
$ nmcli c m ens33 ipv4.method auto connection.autoconnect yes
- IP를 수동 설정 하기 위해
ipv4.method
를manual
로 설정하고ipv4.addresses
에 IP를 입력한다.ipv4.gateway
로 게이트웨이 설정을 하고ipv4.dns
로 DNS 설정을 한다.
$ nmcli c m eth0 ipv4.method manual connection.autoconnect yes ipv4.addresses 10.20.30.41/24 ipv4.gateway 10.20.30.254 ipv4.dns "168.126.63.1 168.126.63.2"
route
- 역할
- 라우팅 테이블을 표시하거나 수정한다.
- 네트워크 주소 (패킷의 목적지 주소와 넷마스크를 AND 연산)와 라우팅 테이블에 매칭되는 경로가 있다면 해당 경로에 설정된 네트워크 인터페이스를 통해 패킷을 라우팅한다.
형식
route route add [-net|-host] target [netmast Nm][gw Gw][[dev] if] route del [-net|-host] target [gw Gw][netmast Nm][[dev] if]
- 라우팅 테이블 출력하기
- 아무 옵션없이 명령어 입력 시, 시스템의 라우팅 테이블 정보를 보여준다.
$ route
-n
옵션 사용 시 있는 그대로 숫자를 표시한다.
$ route -n
- 디폴트 게이트웨이 추가 및 삭제하기
add default gw
를 사용하여 디폴트 게이트웨이를 추가한다.
$ route add default gw 10.0.2.2 dev eth0
del
로 디폴트 게이트웨이를 삭제한다.
$ route del default gw 10.0.2.2
- 특정 네트워크에 대한 라우팅 정보 추가 및 삭제하기
-net
와netmask
을 사용해 특정 네트워크를 목적지로 하는 라우팅 정보를 추가한다.
$ sudo route add -net 10.0.2.128 netmask 255.255.255.128 gw 10.0.2.2 dev eth0
del
을 사용해 디폴트 게이트웨이를 삭제한다.
$ sudo route del -net 10.0.2.128 netmask 255.255.255.128 gw 10.0.2.2 dev eth0
- 특정 호스트에 대한 라우팅 정보 추가 및 삭제하기
-host
를 사용하여 특정 호스트를 목적지로 하는 라우팅 정보를 추가한다.
$ route add -host 10.0.2.50 dev eth0
del
과-host
를 사용하여 특정 호스트를 목적지로 하는 라우팅 정보를 삭제한다.
$ sudo route del -host 10.0.2.50 dev eth0
arp
- 역할
- 이더넷 기반 IP 통신을 위해 호스트 주소를 MAC 주소로 변환해야 한다.
- 호스트 주소에 대한 MAC 주소를 알아내기 위해 ARP 프로토콜을 사용한다.
- 이 때 알아낸 MAC 주소를 ARP 캐시에 저장한다.
- 동일한 컴퓨터에 통신을 시도할 경우, 다시 ARP 프로토콜을 수행할 필요가 없다.
형식
arp [-a][hostname] arp -s hostname hwaddr arp -d hostname
- arp 캐시 보기
- 옵션 없이 사용 시 ARP 캐시를 확인할 수 있다.
-e
를 사용해도 동일하며, BSD 스타일로 표시된다.
$ arp
-a
사용 시, 리눅스 스타일로 표시된다.$ arp -a ? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
-a IP 주소
입력 시 특정 호스트의 MAC 주소를 알 수 있다.$ arp -a 10.0.2.2
- arp 캐시에 정보 추가 및 삭제하기
-s
를 사용하여 직접 IP 주소와 MAC 주소를 입력할 수 있다.
$ arp -s 10.0.2.3 11:22:33:44:55:66
-d
를 사용하여 ARP 캐시에서 특정 IP 주소의 정보를 삭제할 수 있다.
$ arp -d 10.0.2.3
- 그 밖의 옵션
-n
: 출력 정보를 도메인 주소 대신 IP 주소로 출력한다.-v
: 관련 정보를 상세히 출력한다.
☑️ 네트워크 진단 명령어
ethtool
- 역할
- 네트워크 인터페이스 카드 (NICs)를 위한 유틸리티 또는 설정 도구
- 네트워크 속도(speed), 포트(port), 자동 설정(auto-negotiation)과 같은 네트워크 카드의 설정을 변경한다.
형식
ethtool [options] interface
- 예제
- 네트워크 인터페이스의 정보 보기
$ ethtool ens33
- 네트워크 인터페이스의 디바이스 드라이버 정보 보기
$ ethtool -i eth0
- 네트워크 인터페이스의 통계 보기
$ ethtool --statistics eth0
- 네트워크 인터페이스의 설정 변경하기
$ ethtool --change eth0 spped 100 duplex full autoneg off # speed, duplex, autoneg의 값 변경
IP
- 역할
ifconfig
를 대체한다.- 시스템의 네트워크 인터페이스에 주소를 할당하거나 파라미터 설정 기능을 수행한다.
형식
ip [options][command][address][dev interface]
- 네트워크 인터페이스의 정보 출력
- 모든 네트워크 인터페이스의 정보를 출력한다.
$ ip addr $ ip addr show $ ip addr list
- IP 할당 및 제거
- 네트워크 인터페이스에 IP를 할당한다.
$ ip addr add 192.168.100.100 dev eth0
- 네트워크 인터페이스에 IP와 넷마스크를 할당한다.
$ ip addr add 192.168.100.100/255.255.255.0 dev eth0 $ ip addr add 192.168.100.100/24 dev eth0
- 네트워크 인터페이스에 브로드캐스트 주소를 할당한다.
$ ip addr add broadcast 192.168.100.255 dev eth0
- 네트워크 인터페이스에서 IP 주소를 삭제한다.
$ ip addr del 192.168.100.100/24 dev eth0
- 네트워크 인터페이스 상태 및 파라미터 변경
- 네트워크 인터페이스를 비활성화한다.
$ ip link set dev eth0 down
- 네트워크 인터페이스를 활성화한다.
$ ip link set dev eth0 up
- 네트워크 인터페이스의 MTU(Maximum Transfer Unit)를 변경한다.
$ ip link set mtu 9000 dev eth0
- 네트워크 인터페이스의 ARP 캐시 관리
- 네트워크 인터페이스의 ARP 캐시 정보를 출력한다.
$ ip neighbor show
- 네트워크 인터페이스의 ARP 캐시 정보를 추가한다.
$ ip neighbor add 192.168.101.10 lladdr 11:22:33:44:55:66 dev eth0 nud perm
- 네트워크 인터페이스의 ARP 캐시 정보를 삭제한다.
$ ip neighbor del 192.168.101.10 dev eth0
- 라우팅 정보 관리
- 라우팅 정보를 출력한다.
$ ip route $ ip route list
- 라우팅 정보를 추가한다.
- 특정 IP 주소에 대한 라우팅 정보를 추가하려면 IP 주소를 명시해야 한다.
default
: 기본 게이트 웨이를 지정할 때 사용
$ ip route add 10.0.2.128/25 via 10.0.2.130 dev eth0
- 라우팅 정보를 삭제한다.
$ ip route del 10.0.2.128/25
ping
- 역할
- ICMP(Internet Control Message Protocol)을 이용한 네트워크 상태 진단 도구
- 원격 호스트가 네트워크에 연결된 상태인지 확인하고 네트워크 지연시간을 측정할 수 있다.
형식
ping options hostname|address
주요 옵션
옵션 설명 -c count ping을 보낼 횟수(기본 값은 무제한) -i interval ping을 보낼 시간 간격(기본값은 1초) -s size ping을 보낼 데이터의 크기(최대 65507) -f ping을 최대한 많이 보낸다(flood ping), -i 옵션을 지정하지 않는다면 0 값으로 기본 설정되며 가능한 많은 ping 요청을 전송한다. -w seconds ping 시작 후 몇 초 뒤에 실행을 멈출지 결정한다. -i interface 네트워크 인터페이스가 다수일 경우 ping을 보낼 인터페이스를 지정한다. - ping 전송하기
-c
를 사용해 ping을 10번 보낼 때마다-s
로 설정한 데이터를 1000바이트씩 보낸다.-i
를 통해 0.2초마다 8.8.8.8 주소로 ping을 전송한다.
$ ping -c 10 -s 1000 -i 0.2 8.8.8.8
- 정한 시간동안 ping 하기
-w
을 사용해 8.8.8.8 주소로 3초간ping
을 수행한다.
$ ping -w 3 8.8.8.8
- TTL(time to live)
- ping 전송 시 ICMP 패킷이 여러 라우터를 거쳐 상대방에 도달할 때 TTL 값은 하나씩 감소한다.
- 예를 들어, TTL 기본값이 64인데 TTL이 53이라면 11개의 라우터를 거친 것이다.
- TTL은 OS마다 기본값이 다르다.
- 아래 명령어로 기본값을 변경할 수 있다.
$ systl net.ipv4.ip_default_ttl=129 $ echo 129 | tee /proc/sys/net/ipv4/ip_default_ttl
netstat
- 역할
- 네트워크 연결, 라우팅 테이블, 인터페이스의 통계 정보, 마스커레이드 연결, 멀티캐스트 멤버십 등 다양한 네트워크 정보를 출력한다.
형식
netstat options
주요 옵션
옵션 설명 옵션 지정 안함 열려있는 소켓의 모든 정보를 출력한다. —route, -r 라우팅 테이블을 조회한다. —groups, -g IPv4와 IPv6를 위한 멀티캐스트 그룹 멤버십 정보를 조회한다. —interfaces, -i 모든 네트워크 인터페이스에 대한 정보를 출력한다. —masquerade, -M 마스커레이드 연결의 정보를 출력한다. —statistics, -s 각 프로토콜의 통계 정보를 출력한다. - 연결된 모든 소켓 정보 출력하기
-a
: 연결된 모든 소켓 정보를 출력한다.-n
: 심볼릭 이름을 사용하지 않고 숫자로 출력한다.
$ netstat -an
- 라우팅 정보 출력하기
-r
을 사용해 라우팅 정보를 출력한다.
$ netstat -rn
- 특정 주소 패밀리에 대한 정보만 출력한다.
—inet
,-A inet
으로 IPv4 관련 정보를 출력한다.
$ netstat -A inet
—inet6
,-A inet6
으로 Ipv6 관련 정보를 출력한다.
$ netstat -A inet6
- netstat의 소켓 상태 (state)
- 클라이언트의 연결을 기다리는 중이면
LISTEN
, 연결이 완료되었다면ESTABLISHED
가 표시된다.
- 클라이언트의 연결을 기다리는 중이면
traceroute
- 역할
- 네트워크의 장애 분석을 위해 패킷이 어떤 경로로 전송되는지 추적한다.
형식
traceroute hostname | address
- 특정 사이트에 어떤 경로로 패킷이 전달되는 지 추적하기
- www.google.com에 대한 라우팅 과정을 출력한다.
$ traceroute www.google.com
- 8.8.8.8에 대한 라우팅 과정을 출력한다.
$ traceroute 8.8.8.8
- 다양한 방식을 통해 경로 추적하기
-I
는 ICMP 방식으로 경로를 추적한다.
$ traceroute -I www.google.com
-T
는 TCP 방식으로,-U
는 UDP 방식으로 경로를 추적한다.
$ traceroute -T 8.8.8.8 $ traceroute -U 8.8.8.8
mii-tool
- 역할
- 네트워크 인터페이스의 연결 상태를 확인하고 설정을 변경하는데 사용한다.
형식
mii-tool [option] interface
- 네트워크 인터페이스 정보 출력
-v
를 사용하여 네트워크 인터페이스의 상세 정보를 출력한다.
$ mii-tool -v eth0
- 네트워크 인터페이스 재시작
-r
을 사용하여 네트워크 인터페이스를 재시작한다.
$ mii-tool -r eth0
- 네트워크 인터페이스 설정 변경
-F
,—force
를 사용해 네트워크의 인터페이스 정보를 강제로 변경한다.
$ mii-tool -v -F 100baseTx-FD eth0
ss
- 역할
- 소켓에 대한 정보를 제공한다.
형식
ss [option][filter]
옵션
옵션 내용 설명 -n —numeric 서비스 이름 대신 숫자로 표기한다. -r —resolve 숫자 형태의 IP 주소나 포트를 이름으로 표기한다. -a —all 모든 소켓의 정보를 출력한다. -l —listening Listen 소켓의 정보를 출력한다. -o —options 타이머의 정보를 출려한다. -e —extended 확장된 소켓 정보를 출력한다. -m —memory 소켓 메모리 사용량을 출력한다. -p —processes 소켓을 사용하고 있는 프로세스를 출력한다. -i —info 내부 TCP 정보를 출력한다. -s —summary 소켓의 요약 정보를 출력한다. -4 —ipv4 IPv4 소켓 정보만 출력한다. -6 —ipv6 IPv6 소켓 정보만 출력한다. -0 —packet PACKET 소켓 정보를 출력한다. -t —tcp 오직 tcp 소켓 정보만 출력한다. -u —udp 오직 udp 소켓 정보만 출력한다. -f —family=FAMILY 해당하는 주소 패밀리의 소켓만 출력한다. 주요 예제
$ ss # 현재 연결된 소켓 정보 출력 $ ss -a # 모든 소켓 정보 출력 $ ss -l # listen 소켓 정보 출력 $ ss -t # TCP 소켓 정보 출력 $ ss -t state established # 특정 상태(ex. established)의 소켓만 출력 $ ss -ltn sport le 500 # 필터링 기능 제공 (ex. 송신지 포트 500과 같거나 작은 소켓만 출력)
☑️ DNS 명령어
nslookup
- 역할
- 네임 서버 정보를 조회하거나 IP를 통해 도메인명을 질의한다.
형식
nslookup [option] hostname|address [dns]
대화명으로 네임 서버 질의하기
$ nslookup