Linux NetworkManager을 Command Line에서 사용하기, nmcli
nmcli 툴은 readhat에서 개발한 NetworkManager을 제어할 수 있는 command-line 툴이다.
기본 명령은 다음과 같다.
nmcli OPTIONS
OBJECT { COMMAND
| help }
만일 설치된 Linux의 언어가 한글로 설정되어 있다면 설명과 결과들을 한글로 확인 할 수 있다.~]$ nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-t[erse] terse output
-p[retty] pretty output
-m[ode] tabular|multiline output mode
-f[ields] |all|common specify fields to output
-e[scape] yes|no escape columns separators in values
-n[ocheck] don't check nmcli and NetworkManager versions
-a[sk] ask for missing parameters
-w[ait] set timeout waiting for finishing operations
-v[ersion] show program version
-h[elp] print this help
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
보다 자세한 것은 [Reference.2] 내용을 참고하면 된다.
nmcli로 설정하는 모든 것들은 데스크탑 환경(http://edoli.tistory.com/119)에 내용들이 반영되기 때문에 네트워크 설정에 대한 호환성을 유지할 수 있지만, 내부적으로 D-Bus(https://en.wikipedia.org/wiki/D-Bus)을 사용함으로 응답 속도가 약간 느리다는 것을 확인할 수 있다. 하지만 command line에서 설정된 것을 그대로 데스크탑 환경에서도 사용가능하기 때문에 초보자들이 사용하는데 좋은 툴이다.
우선 NetworkManager에서는 'Device'와 'Connection' 개념을 알면 쉽게 사용할 수 있다.
위 nmcli 설명 중 'OBJECT' 항목에 있는 것이다.
- Device
- 물리적인 장치로 유/무선 하드웨어 장치를 의미
- Device는 한 개 이상의 Connection을 가질 수 있으며, 여러개의 Connection 중 하나를 선택할 수 있음.
- 무선 장치는 여러 무선 공유기에 서로 다른 정보로 연결할 수 있기 때문에 여러 개의 Connection은 필수
- 유선 장치는 IP 설정을 Static 또는 Dynamic(DHCP)으로 설정하는 연결을 각각 둔 후 필요시 사용 가능(보통은 DHCP로 하나만 설정해서 사용)
- Connection
- Device를 이용하여 유/무선 네트워크 연결을 관리하는 것으로 이 설정에는 IPv4 또는 IPv6에서 IP를 어떻게 받을 것인지 여부와 더불어 무선 같은 경우에는 연결할 SSID, 암호 체계 및 암호 등을 관리한다. nmcli을 사용하면 wpa_supplicant을 사용하는 것보다 훨씬 무선 공유기(AP)의 암호 체계를 설정할 필요 없이 쉽게 해당 공유기에 쉽게 연결할 수 있다.
nmcli 툴 사용 후 로그들을 모두 영어로 보고 싶다면 다음과 같이 설정한다. 하지만 콘솔을 닫으면 설정은 초기화 된다.
~]$ nmcli d
장치 유형 상태 연결
eth0 ethernet 연결됨 Local Connection
wlx0013efc21589 wifi 연결됨 MarsNetworks
eth1 ethernet 사용할 수 없음 --
lo loopback 관리되지 않음 --
~]$ export LC_ALL=C
~]$ nmcli d
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Local Connection
wlx0013efc21589 wifi connected MarsNetworks
eth1 ethernet unavailable --
lo loopback unmanaged --
[DEVICE]
Device에 대한 command들은 다음과 같이 'nmcli d help'를 통해 자세하게 확인 할 수 있다.
현재 연결 상태를 확인은 'status' 명령을 사용한다. 'nmcli d' command은 'nmcli d status'와 동일하다. 아래 표시 정보 중에 녹색은 장치가 네트워크에 연결되었다는 의미이며, 'CONNECTION' 필드에 있는 이름은 Device에 연결된 Connection 정보의 이름이다.~]$ nmcli d help
Usage: nmcli device { COMMAND | help }
COMMAND := { status | show | connect | reapply | disconnect | delete | monitor | wifi | lldp }
status
show []
set [ifname] [autoconnect yes|no] [managed yes|no]
connect
reapply ...
disconnect ...
delete ...
monitor ...
wifi [list [ifname ] [bssid ]]
wifi connect <(B)SSID> [password ] [wep-key-type key|phrase] [ifname ]
[bssid ] [name ] [private yes|no] [hidden yes|no]
wifi hotspot [ifname ] [con-name ] [ssid ] [band a|bg] [channel ] [password ]
wifi rescan [ifname ] [[ssid ] ...]
lldp [list [ifname ]]
~]$ nmcli d
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Local Connection
wlx0013efc21589 wifi connected MarsNetworks
eth1 ethernet unavailable --
lo loopback unmanaged --
Device의 command 중에 'connect'는 연결된 Connection 정보로 연결을 시작한다.~]$ nmcli c
NAME UUID TYPE DEVICE
Local Connection 435586b8-ae15-46d2-889c-23826f139078 802-3-ethernet eth0
MarsNetworks 6c15b25a-6cb9-427a-9252-e9e579379b88 802-11-wireless wlx0013efc21589
TFTP/HTTP Connection fb895358-84bf-408d-982c-a00b6e47f03d 802-3-ethernet --
그리고 Device command에 있는 'wifi'는 무선 장치에 대한 여러가지 정보들을 확인하거나 설정할 수 있는데, 주변의 AP 검색, 특정 AP에 연결을 시도할 수 있다.AP 검색을 위해서는 다음과 같이 command을 입력한다. 색상은 신호 세기에 따라 표시되는데, 녹색이 가장 신호가 좋고, 오렌지색이 그 다음으로 신호 세기가 좋다는 의미이다. '*' 표시는 현재 연결된 AP 정보를 알려 준다.
~]$ nmcli device wifi list
* SSID MODE CHAN RATE SIGNAL BARS SECURITY
T wifi home Infra 1 54 Mbit/s 59 *** WPA1 WPA2 802.1X
iptimejry Infra 1 54 Mbit/s 55 ** WPA2
* MarsNetworks Infra 11 54 Mbit/s 51 ** WPA2
검색된 무선 공유기에 연결은 쉽다. 단지 'nmcli d wifi connect ~]$ nmcli d wifi connect 'T wifi home' password '12345678'
Error: Connection activation failed: (7) Secrets were required, but not provided.
~]$ nmcli c
NAME UUID TYPE DEVICE
Local Connection 435586b8-ae15-46d2-889c-23826f139078 802-3-ethernet eth0
MarsNetworks 6c15b25a-6cb9-427a-9252-e9e579379b88 802-11-wireless wlx0013efc21589
TFTP/HTTP Connection fb895358-84bf-408d-982c-a00b6e47f03d 802-3-ethernet --
iptimejry e5e57cea-dbd1-4ba9-ae6f-900430f0b837 802-11-wireless --
[CONNECTION]
Connection은 Device에서 설명했던 것처럼 Device을 기반으로 서로 다른 연결 정보를 가지도록 하여 한 개 이상 생성할 수 있다. 하지만 Device는 오직 한 개의 Connection만 사용하여 연결이 된다.
[추가 유용한 설정들]
Connection은 Device에서 설명했던 것처럼 Device을 기반으로 서로 다른 연결 정보를 가지도록 하여 한 개 이상 생성할 수 있다. 하지만 Device는 오직 한 개의 Connection만 사용하여 연결이 된다.
~]$ nmcli c help
Usage: nmcli connection { COMMAND | help }
COMMAND := { show | up | down | add | modify | edit | delete | monitor | reload | load }
show [--active] [--order ]
show [--active] [id | uuid | path | apath] ...
up [[id | uuid | path] ] [ifname ] [ap ] [passwd-file ]
down [id | uuid | path | apath] ...
add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([+|-]. )+]
modify [--temporary] [id | uuid | path] ([+|-]. )+
clone [--temporary] [id | uuid | path ]
edit [id | uuid | path]
edit [type ] [con-name ]
delete [id | uuid | path]
monitor [id | uuid | path] ...
reload
load [ ... ]
import [--temporary] type file
export [id | uuid | path] []
'nmcli c' command 사용하여 추가, 삭제 및 수정과 더불어 현재 연결된 정보을 확인할 수 있다.
다음은 'Local Connection' 연결 정보를 확인하는 명령이다. 이 Connection 이름에는 공백이 있기 때문에 ''을 사용했다.
~]$ nmcli c show 'Local Connection'
connection.id: Local Connection
connection.uuid: 435586b8-ae15-46d2-889c-23826f139078
connection.interface-name: --
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.timestamp: 1475720441
connection.read-only: no
connection.permissions:
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries:
connection.gateway-ping-timeout: 0
connection.metered: unknown
connection.lldp: -1 (default)
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: full
802-3-ethernet.auto-negotiate: yes
802-3-ethernet.mac-address: 00:1C:42:F5:43:D8
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu: auto
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options:
802-3-ethernet.wake-on-lan: 1 (default)
802-3-ethernet.wake-on-lan-password: --
ipv4.method: auto
ipv4.dns:
ipv4.dns-search:
ipv4.dns-options: (default)
ipv4.addresses:
ipv4.gateway: --
ipv4.routes: { ip = 10.0.1.1/32 }
ipv4.route-metric: -1
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dhcp-timeout: 0
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.dhcp-fqdn: --
ipv4.never-default: no
ipv4.may-fail: yes
ipv4.dad-timeout: -1 (default)
ipv6.method: auto
ipv6.dns:
ipv6.dns-search:
ipv6.dns-options: (default)
ipv6.addresses:
ipv6.gateway: --
ipv6.routes:
ipv6.route-metric: -1
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
ipv6.may-fail: yes
ipv6.ip6-privacy: 0 (disabled)
ipv6.addr-gen-mode: eui64
ipv6.dhcp-send-hostname: yes
ipv6.dhcp-hostname: --
GENERAL.NAME: Local Connection
GENERAL.UUID: 435586b8-ae15-46d2-889c-23826f139078
GENERAL.DEVICES: eth0
GENERAL.STATE: activated
GENERAL.DEFAULT: yes
GENERAL.DEFAULT6: no
GENERAL.VPN: no
GENERAL.ZONE: --
GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/2
GENERAL.SPEC-OBJECT: /
GENERAL.MASTER-PATH: --
IP4.ADDRESS[1]: 10.0.1.15/24
IP4.GATEWAY: 10.0.1.1
IP4.DNS[1]: 10.0.1.1
IP4.DOMAIN[1]: kornet
DHCP4.OPTION[1]: requested_routers = 1
DHCP4.OPTION[2]: requested_domain_search = 1
DHCP4.OPTION[3]: requested_time_offset = 1
DHCP4.OPTION[4]: requested_domain_name = 1
DHCP4.OPTION[5]: requested_rfc3442_classless_static_routes = 1
DHCP4.OPTION[6]: requested_broadcast_address = 1
DHCP4.OPTION[7]: requested_netbios_scope = 1
DHCP4.OPTION[8]: requested_wpad = 1
DHCP4.OPTION[9]: next_server = 0.0.0.0
DHCP4.OPTION[10]: expiry = 1478310264
DHCP4.OPTION[11]: requested_interface_mtu = 1
DHCP4.OPTION[12]: requested_subnet_mask = 1
DHCP4.OPTION[13]: routers = 10.0.1.1
DHCP4.OPTION[14]: dhcp_message_type = 5
DHCP4.OPTION[15]: ip_address = 10.0.1.15
DHCP4.OPTION[16]: requested_static_routes = 1
DHCP4.OPTION[17]: domain_name = kornet
DHCP4.OPTION[18]: requested_domain_name_servers = 1
DHCP4.OPTION[19]: broadcast_address = 10.0.1.255
DHCP4.OPTION[20]: requested_ntp_servers = 1
DHCP4.OPTION[21]: requested_netbios_name_servers = 1
DHCP4.OPTION[22]: dhcp_lease_time = 2592000
DHCP4.OPTION[23]: domain_name_servers = 10.0.1.1
DHCP4.OPTION[24]: requested_ms_classless_static_routes = 1
DHCP4.OPTION[25]: subnet_mask = 255.255.255.0
DHCP4.OPTION[26]: network_number = 10.0.1.0
DHCP4.OPTION[27]: requested_host_name = 1
DHCP4.OPTION[28]: dhcp_server_identifier = 10.0.1.1
IP6.ADDRESS[1]: fe80::21c:42ff:fef5:43d8/64
IP6.GATEWAY:
만일 위 정보에서 IP4 정보만 얻고 싶다면 'grep' 명령을 다음과 같이 추가하면 된다.
~]$ nmcli c show 'Local Connection' | grep IP4
IP4.ADDRESS[1]: 10.0.1.15/24
IP4.GATEWAY: 10.0.1.1
IP4.DNS[1]: 10.0.1.1
IP4.DOMAIN[1]: kornet
[추가 유용한 설정들]
- Static IP 설정
~]$ nmcli con mod "Local Connection” ipv4.method manual ipv4.addr "10.0.1.25/8, 10.0.1.1/8"
- DHCP IP 설정
~]$ nmcli con mod "Local Connection" ipv4.method auto ipv4.addr "" ipv4.gateway "" ipv4.dns ""
[Reference]
1. RPiWebUI.Luna: https://github.com/kmansoo/RPiWebUI.Luna, 2016, nmcli을 이용한 Web UI기반 유/무선 네트워크 설정 툴
2. USING THE NETWORKMANAGER COMMAND LINE TOOL, NMCLI
3. D-Bus: https://en.wikipedia.org/wiki/D-Bus
4. 7가지 데스크탑 환경: http://edoli.tistory.com/119
댓글
댓글 쓰기