Linux

[Linux] 네트워크 관리 - NetworkManager

TTOII 2022. 3. 4. 16:49
728x90

✅ 리눅스 네트워크 관리

✅ 네트워크 진단 명령어

ifconfig

ifconfig는 interface config의 약자로 네트워크 인터페이스 관련 명령어로 설정하거나 직접 확인하는 명령어이다.
ifconfig 명령으로 설정한 것은 시스템을 재부팅하면 그 정보가 사라진다. 따라서 지속적으로 유지하려면 /etc/rc.d/rc.local 파일에 위의 설정을 입력해놓거나 /etc/sysconfig/network-scripts/ifcfg-eth0 파일에 설정해놓아야 한다.

ifconfig [interface] [address] [up/down] [옵션]
옵션 설명
interface NIC (Network Interface Card)를 말하며, 보통 랜(LAN) 카드 또는 이더넷 (Ethernet) 카드라 한다. 
address 보통 IP가 부여된다.
up/down 네트워크를 활성화/비활성화 시킨다.
option netmask, broadcast 등을 설정할 수 있다.

 

✅ 네트워크 설정 파일 항목

항목 설명
TYPE=[네트워크 인터페이스 타입] 네트워크 인터페이스 타입 설정
NM_CONTROLLED=[ yes | no ] 네트워크 인터페이스 장치가 Network Manager 에 의해 컨트롤 되는지에 대한 설정
BOOTPROTO=[ none | dhcp | static ] 부팅할 때 사용할 프로토콜 설정
none - bootstrap 프로토콜 사용
dhcp - 동적 할당, 자동으로 IP 할당받아 사용
static - 정적 할당,  고정 IP를 사용

* bootstrap 프로토콜
부팅 호스트가 사용자의 관리 없이 동적으로 구성할 수 있게 해주는 UDP/IP 기반 프로토콜
BROADCAST=[addr] 브로드캐스트 주소 설정
ONBOOT=[ yes | no ] 부팅할 때 인터페이스를 활성화 시킬 것인지 설정
IPADDR=[ip addr] IP 주소 설정
IPV4_FAILURE_FATAL=[ yes | no ] IPv4 설정이 실패했을 때 그 장치를 비활성화할지에 대한 설정
IPV6INIT=[ yes | no ] 인터페이스의 IPv6 를 활성화할지에 대한 설정
IPV6_FAILURE_FATAL=[ yes | no ]
IPv6 설정이 실패했을 때 그 장치를 비활성화할지에 대한 설정
NETMASK=[netmask addr]
NETMASK 주소 설정
PREFIX=[subnet mask(bit)]
서브넷 마스크 값 설정, bit 값으로 설정
예) 16, 24
DEVICE=[네트워크 인터페이스 디바이스 이름]
물리적인 네트워크 인터페이스 이름 설정
PEERDNS=[ yes | no ]
DNS resolution에 사용되는 /etc/resolv.conf 파일이 dhcp 서버로부터 정보를 얻는 것을 허용하는지에 대한 설정
PEERDNS 지시자가 no 로 설정되지 않는다면 주소는 /etc/resolv.conf 에 적힌 네임서버주소가 된다.
yes: 기본값, DNS 지시자가 설정되고 DHCP 를 사용하면 /etc/resolv.conf 를 수정한다. 
no: /etc/resolv.conf 를 수정하지 않는다.
PEERROUTES=[ yes | no ]
인터페이스에 대한 default gateway 를 정의하는 라우팅테이블 정보를 dhcp 서버로부터 얻을지에 대한 설정
GATEWAY=[gateway addr]
게이트웨이 주소 설정
DNS1=[DNS addr]
주 DNS 주소 설정
DNS2=[DNS addr]
보조 DNS 주소 설정
LINKDELAY=[time]
장치를 설정하기 전에 링크 교섭에서 대기하는 시간
기본 값은 5초
예를 들어, STP에 의해 발생하는 지연은 이 값을 증가시켜 해결할 수 있다.

* STP(Spanning Tree Protocol)
스위치나 브리지에서 발생하는 루핑을 막아주기 위한 프로토콜
스위치나 브리지 구성에서 출발지에서 목적지까지 경로가 두 개 이상 존재할 때 한 개의 경로만 남겨주고 나머지는 모두 끊어두었다가 사용하던 경로에 문제가 발생하면 그때 끊어두었던 경로를 하나씩 살린다.
이 때, 끊어둔 경로를 다시 살리는 동안 약간의 지연이 될 수 있는데 LINKDELAY 의 값을 설정해 대기시간을 주면 이 부분이 해결된다.

 

✅ 네트워크 관리자(NetworkManager)란 

  • 네트워크와 관련된 모든 설정을 관리하고 모니터링 하는 서비스이다.
  • 네트워크 관리자는 /etc/sysconfig/network-scripts 디렉토리에 설정 파일을 저장한다.

 

✅ 네트워크 관리자가 제공하는 명령어

도구이름 설명
nmcli 커맨드라인 도구
nmtui 텍스트 유저 인터페이스 도구
nm-connection-editor 그래픽 도구

 

✅ 인터페이스 이름

- 기존은 eth0, eth1과 같이 ethX 형식이었지만 최신 리눅스에서는 그렇지 않음

- 장치유형, 어댑터유형, 번호순으로 조합된 이름으로 만들어 짐

분류 설명
장치 유형 en(이더넷), wl(WLAN), ww(WWAN)
어댑터 유형 o(on-board), s(hot-plug-slot), p(PCI위치), b(BCMA bus core)

 

✅ 네트워크 관리자 도구

① nmcli (Network Manager Command Line Interface)

  • 연결 목록 확인 
    nmcli connection show [connection-name] 
  • 연결 생성
    nmcli connection add [con-name, ifname, type] 설정해야함 ip4 ‘IP/sb’ gw4 ‘GW’ 설정도 가능
    nmcli connection up connection-name 해주어야 활성화 됨
  • 연결 제거
    nmcli connection delete connection-name
    (/etc/sysconfig/network-scripts/ 안의 파일도 같이 삭제됨)
  • 연결설정 수정
    nmcli connection modify connection-name subcommand argument
    +ipv4.addresses 하면 아이피를 여러 개 두어 문제 생길 시 다른 아이피로 통신 가능
    ipv4.addresses는 아이피/서브넷 같이 설정해 주어야함
    수정 후 반드시 method 설정 manual로 해주어야 함 (정적할당), method를 auto(동적할당)
    CentOS 7.0 버전에서는 ipv4.gateway 부분이 따로 없음, ipv4.addresses에 같이 써주어야 함
    con reload 후 con up 해주어야 적용됨
명령어 설명 기타
nmcli con show 네트워크 연결 목록 확인  
nmcli con add 네트워크 연결 생성 con-name, ifname, type 설정해야함
nmcli con up 설정 활성화  
nmcli con down 설정 비활성화  
nmcli con reload 설정을 다시 불러옴  
nmcli con delete 연결설정 삭제 /etc/sysconfig/network-scripts/ 안의 파일도 같이 삭제됨
nmcli con modify 연결설정 수정  

 nmtui(NetworkManager Text User Interface)

- 텍스트 상자 형식의 설정 도구를 사용함

- yum y install NetworkManager-tui 로 설치 가능

 

 nm-connetcion-editor

- 시스템이 그래픽 환경을 지원해야 사용가능

- 활성화 버튼이 없어서 nmcli cond up으로 활성화 해 주어야함

 

④ 설정 파일을 직접 수정하기

- 오타 발생이 있어 권장하지 않는 방법 

- vi 에디터를 열어서 수정하면 된다.

 

✅ 호스트명(hostname) 설정

- hostname, hostnamectl : 호스트에 대한 정보 출력

- hostnamectl set-hostname 변경할이름 : 호스트명 변경

- hostnamectl set-hostname “” : 호스트명 삭제

- 호스트이름 분류

분류 설명
static hostname 사용자가 지정한 호스트명
/etc/hostname 파일에 저장
transient hostname 커널이 임의로 부여한 호스트명
pretty hostname 특수문자가 포함된 호스트명

 

✅ 네트워크 관리 명령어 실습

[root@localhost ~]# systemctl status NetworkManager.service

 

IP 설정

어떠한 인터페이스 연결할건지

네트워크 통신 방식은 무엇을 쓸 것인지 (wifi, ethernet, bluetooth)

 

실습에 사용할 인터페이스 카드는 enp0s9이다. 

enp0s3 => nat - 외부용 

enp0s8 => 원격으로 사용하기 위한 내부용

 

[root@localhost ~]# ifconfig

[root@localhost ~]# ifconfig enp0s8

[root@localhost ~]# ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:33:29:ef brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
       valid_lft 479sec preferred_lft 479sec
    inet6 fe80::790d:b8a3:2326:1e15/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@encore ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s9
UUID=509b32f3-83fd-443a-b4eb-b5e32db2e3ae
DEVICE=enp0s9
ONBOOT=no
[root@localhost ~]# nmcli
agent       device      help        networking
connection  general     monitor     radio

[root@localhost ~]# nmcli dev
DEVICE      TYPE      STATE          CONNECTION
enp0s3      ethernet  연결됨         enp0s3
enp0s8      ethernet  연결됨         enp0s8
virbr0      bridge    연결됨         virbr0
enp0s9      ethernet  연결 끊겼음    --
lo          loopback  관리되지 않음  --
virbr0-nic  tun       관리되지 않음  --

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg*
/etc/sysconfig/network-scripts/ifcfg-enp0s3
/etc/sysconfig/network-scripts/ifcfg-enp0s8
/etc/sysconfig/network-scripts/ifcfg-enp0s9
/etc/sysconfig/network-scripts/ifcfg-lo

[root@localhost ~]# nmcli con
NAME    UUID                                  TYPE      DEVICE
enp0s3  3d6d0ae5-78a1-4dad-b92b-2ab0c67cc40d  ethernet  enp0s3
enp0s8  8eff3d00-cb32-4591-b471-4c46e2a0da4d  ethernet  enp0s8
virbr0  0692e694-5e12-464f-882a-5b57d2db2aba  bridge    virbr0
enp0s9  509b32f3-83fd-443a-b4eb-b5e32db2e3ae  ethernet  --

[root@localhost ~]# nmcli connection
add      delete   edit     help     load     monitor  show
clone    down     export   import   modify   reload   up

[root@localhost ~]# nmcli connection add
* ip 설정 방법 *
nmcli con add 입력 후 tab 2번 

1. con-name (== connection.id) - 연결 이름 
2. if-name (== connection.interface) - 연결할 인터페이스
3. type (== connection.type) - 통신 방식
4. autoconnect (== connection.autoconnect) - 부팅시 자동연결 설정
------------------------유동 ip 설정 가능 (dhcp) ------------------------
고정 ip 설정은 아래 내용을 추가
5. ip4 (==ipv4.addresses) - ip주소
6. gw4 (==ipv4.gateway) - gateway 주소

 

연결 실습

[root@localhost ~]# nmcli con add con-name dhcp ifname enp0s9 type
802-11-olpc-mesh  cdma              macsec            team
802-11-wireless   dummy             macvlan           tun
802-3-ethernet    ethernet          olpc-mesh         vlan
adsl              generic           ovs-bridge        vpn
bluetooth         gsm               ovs-interface     vxlan
bond              infiniband        ovs-port          wifi
bridge            ip-tunnel         pppoe             wimax

[root@localhost ~]# nmcli con add con-name dhcp ifname enp0s9 type ethernet autoconnect yes
연결 'dhcp' (365887a9-5bc7-48fd-8969-73a54f8bc31e)이 성공적으로 추가되었습니다.

[root@localhost ~]# nmcli con
NAME    UUID                                  TYPE      DEVICE
dhcp    365887a9-5bc7-48fd-8969-73a54f8bc31e  ethernet  enp0s9
enp0s3  3d6d0ae5-78a1-4dad-b92b-2ab0c67cc40d  ethernet  enp0s3
enp0s8  8eff3d00-cb32-4591-b471-4c46e2a0da4d  ethernet  enp0s8
virbr0  0692e694-5e12-464f-882a-5b57d2db2aba  bridge    virbr0
enp0s9  509b32f3-83fd-443a-b4eb-b5e32db2e3ae  ethernet  --

dhcp가 추가된 것을 확인할 수 있다.

[root@localhost ~]# nmcli con reload
[root@localhost ~]# nmcli con show dhcp
connection.id:                          dhcp
....

 

고정 ip 만들기

[root@localhost ~]# nmcli con add con-name static1 ifname enp0s9 type ethernet ip4 192.168.56.201/24 gw4 192.168.56.1
연결 'static1' (a47ac268-f989-42ca-b6e7-0ffce169ce18)이 성공적으로 추가되었습니다.

[root@localhost ~]# nmcli con
NAME     UUID                                  TYPE      DEVICE
....
static1  a47ac268-f989-42ca-b6e7-0ffce169ce18  ethernet  --

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg*
....
/etc/sysconfig/network-scripts/ifcfg-static1
해당 연결이 설정된다. 

[root@localhost ~]# nmcli con show static1
connection.id:                          static1
....
connection.interface-name:              enp0s9
....

[root@localhost ~]# ip addr show enp0s9
[root@localhost ~]# nmcli con up static1
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/6)

[root@localhost ~]# nmcli con
NAME     UUID                                  TYPE      DEVICE
....
static1  a47ac268-f989-42ca-b6e7-0ffce169ce18  ethernet  enp0s9
....

[root@localhost ~]# ip addr show enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:56:a9:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.201/24 brd 192.168.56.255 scope global noprefixroute enp0s9
       valid_lft forever preferred_lft forever
    inet6 fe80::f5d8:8cc2:d20c:ee39/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
# 192.168.56.201/24  ip주소 뒤에는 반드시 prefix를 붙여줘야 한다.

[root@localhost ~]# nmcli con down static1
연결 'static1'이(가) 성공적으로 비활성화되었습니다(D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/6).

[root@localhost ~]# nmcli con
NAME     UUID                                  TYPE      DEVICE
dhcp     365887a9-5bc7-48fd-8969-73a54f8bc31e  ethernet  enp0s9
enp0s3   3d6d0ae5-78a1-4dad-b92b-2ab0c67cc40d  ethernet  enp0s3
enp0s8   8eff3d00-cb32-4591-b471-4c46e2a0da4d  ethernet  enp0s8
virbr0   0692e694-5e12-464f-882a-5b57d2db2aba  bridge    virbr0
enp0s9   509b32f3-83fd-443a-b4eb-b5e32db2e3ae  ethernet  --
static1  a47ac268-f989-42ca-b6e7-0ffce169ce18  ethernet  --
nmcli con mod[ify]  dhcp  connection.id  static2 
                       연결 이름  수정 항목  수정 내용
내가 수정하고자 하는 연결의 이름을 써준다.                       
[root@localhost ~]# nmcli con mod dhcp connection.id static2
[root@localhost ~]# nmcli con
NAME     UUID                                  TYPE      DEVICE
...
static2  365887a9-5bc7-48fd-8969-73a54f8bc31e  ethernet  enp0s9
...

[root@localhost ~]# nmcli con mod static2 connection.autoconnect no
[root@localhost ~]# nmcli con mod static2 ipv4.method manual
오류: 연결 'static2' 수정 실패: ipv4.addresses: 이 속성은 'method=manual'에 대해 비어 있을 수 없습니다.
# ip를 먼저 부여해야 한다.

[root@localhost ~]# nmcli con mod static2 ipv4.addresses 192.168.56.220/24
[root@localhost ~]# nmcli con show static2
[root@localhost ~]# nmcli con mod static2 ipv4.method manual
[root@localhost ~]# nmcli con mod static2 ipv4.gateway 192.168.56.1
[root@localhost ~]# nmcli con mod static2 ipv4.dns 8.8.8.8
[root@localhost ~]# nmcli con mod static2 +ipv4.addresses 192.168.56.221/24

[root@localhost ~]# nmcli con reload
[root@localhost ~]# nmcli con up static2
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/8)
nmcli con mod static2 connection.id static3 connection.autoconnect yes ipv4.addresses 192.168.56.2111/24 +ipv4.address 192.168.56.151/24 +ipv4.dns 192.168.56.1
nmcli con reload
nmcli con show static3
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg*
/etc/sysconfig/network-scripts/ifcfg-dhcp
/etc/sysconfig/network-scripts/ifcfg-enp0s3
/etc/sysconfig/network-scripts/ifcfg-enp0s8
/etc/sysconfig/network-scripts/ifcfg-enp0s9
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-static1

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-dhcp
직접 수정하면 show로 확인했을 때 이름이 변경되어 있다.
그러나 설정 파일을 열어서 수정하는 것은 오타의 문제가 있어 추천하지 않는다.

ifcfg-연결명
BOOTPROTO => none / dhcp
ipv4.method  manual auto

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]#
[root@localhost ~]# cat /etc/hostname
localhost.localdomain

[root@localhost ~]# hostnamectl set-hostname encore.class4
[root@localhost ~]# hostname
encore.class4

[root@localhost ~]# su -
마지막 로그인: 금  3월  4 09:29:19 KST 2022 192.168.56.1에서 시작 일시 pts/0
[root@encore ~]#

 

참고

더보기

https://seamless.tistory.com/12

https://flightsim.tistory.com/154

https://haker.tistory.com/55?category=967816

 

728x90