home search
OS
Linux
[Linux] Linux Admin (2): 네트워크 설정
2022. 02. 24

네트워크 설정 방식

네트워크 설정은 오래된 방식과 최신 방식인 NetworkManager가 있다. 원래는 Debian 계열과 RH 계열이 설정 방식과 config 파일 포맷이 달랐으나, 지금은 NetworkManager으로 통일되었다.

네트워크 매니저 NetworkManager는 daemon으로 작동하며 네트워크 설정을 수행하고, 자동으로 네트워크 커넥션을 관리한다. 통일된 명령어 사용으로 systemd 기반의 다른 리눅스 배포판(distribution)에게도 동일 방식의 경험을 제공할 수 있다. 이더넷, 와이파이, mobile broadband 등을 지원하여, 각각의 명령어를 따로 알지 않아도 된다.

ifconfig, route는 유닉스 표준 명령어(POSIX)이고 old-fashion 네트워크 설정 명령어이다. 비표준이나 리눅스에만 존재하는 명령어로 ip, nmcli(NetworkManager CLI) 등이 있다.

nmcli(1)

nmcli는 NetworkManager CLI Tool로, 네트워크 관련 대부분의 기능을 가지고 있다. 밑에 나오는 실습 역시 sudo를 붙여 사용하거나 su -로 루트 권한 로그인을 한 뒤에 수행했다.

nmcli g[eneral] : 현재 상태를 보여준다. STATE는 connected/asleep 두 상태를 나타내며, CONNECTIVITY는 full/none.

nmcli n[etworking] : 네트워킹 상태를 조회한다. 뒤에 on/off를 적으면 네트워크를 끄거나 켤 수도 있다. 가끔 네트워킹이 off로 되어 있어 설정이 안 되는 경우가 있으니 항상 이 상태를 확인해야 한다.

nmcli d[ev[ice]] : 네트워크 장치를 확인한다. 아래 사진에서 unmanaged는 네트워크 매니저로 관리되고 있지 않다는 의미이다.

간혹 디바이스 자체가 올라오지 않는 경우가 있다. 해당 디바이스 자체를 비활성화시켰다던지 하는 등의 경우에, Status에 disconnected가 뜬다. 이 경우에 이를 다시 연결(connect)해줘야 한다.

# nmcli dev s
DEVICE  TYPE      STATE        CONNECTION 
enp2s0  ethernet  disconnected --           → 비활성화 되어 있음

# nmcli dev connect <device name> → connect 시킴
Device 'enp2s0' successfully activated

또는 nmcli c 화면에서 DEVICE 란이 –으로 비어 있는 경우도 있다. 이는 nmcli g를 찍어보면 STATE가 asleep이 되어 있을 수 있다. 이럴 때는 네트워크 자체가 off이므로, 이를 on으로 바꿔주어야 한다.

# nmcli c
# nmcli g
# nmcli networking
# nmcli networking on
# nmcli g

이후에는 디바이스 생성이 잘 될 것이며, 그래도 안될 경우에는 하드웨어 인식 상태를 점검해야 한다.

nmcli r[adio] : 무선 관련 설정이 작동되었는지 확인할 수 있다. 소프트웨어적으로 사용 가능한지를 나타내므로 장치가 없어도 enable이라 나올 수 있다.

nmcli c[onnection]
nmcli c[onnection] s[how] → 자세한 출력
nmcli c[onnection] s[how] <connection_name> → 특정 커넥션에 대한 자세한 설명(설정)

커넥션에 관한 조회가 가능하다. NAME에는 커넥션 이름이, DEVICE에는 연결된 디바이스가 나타난다.

특히 nmcli c[onnection] s[how] <connection_name>으로 설정을 확인하는 중 소문자로 표기된 설정 아래에는 대문자로 표기된 설정들이 나온다.

ipv[46].* 처럼 소문자 표기는 오프라인일 때도 보이는 ‘설정된’ 값이고, IP[46].*처럼 대문자 표기는 온라인 일때만 보이는 ‘할당된 값’이다. 해당 커넥션을 비활성화 시키면 소문자 설정만 보인다. 외부에서 다른 툴로 설정을 바꿀 수도 있는데, 설정된 값과 할당된 값이 다를 수도 있기 때문에 나눠놓았다. 배열처럼 설정 뒤에 []가 있는 이유는 하나의 컴퓨터에 여러 개의 IP가 할당될 수 있기 때문이다.

주요 속성(property)을 간단히 보자.

  • ipv4.method : ip 주소를 할당 받을 때 쓸 방법. auto로 지정하면 dhcp로, 자동으로 할당받을 때 사용하고, manual으로 지정하면 수동으로 static(고정) ip를 쓸 때 사용한다
  • ipv4.addr : 수동으로 IP 주소를 할당할 때 쓴다. CIDR 표기법으로 설정해야 한다.
  • ipv4.gateway : gateway IP를 넣는다
  • ipv4.dns : DNS 서버 IP를 넣는다.

속성을 지정할 때는 prefix를 사용할 수도 있다.

  • + : 이전 값을 유지하면서 추가로 넣는다.
  • - : 해당 값을 지운다.
  • none : 아예 값을 교체한다

네트워크 디바이스 네이밍

예전에는 eth#[:n]의 포맷으로 eth0, eth0:1 처럼 표기했으나, 지금은 이 방법을 지양한다.

지금은 새 기법인 ‘Consistent Network Device Naming’을 사용한다. 이 기법에선 prefix를 가지고 네트워크 장치가 무엇인지 알 수 있다. en(ethernet), wl(Wireless lan), ww(Wireless wan)이 있다. 그 뒤에 붙는 규칙 중 일부는 아래와 같다.

device name 설명
o<index> on-board 디바이스의 인덱스 번호
s<slot>[f<function>][d] hotplug slot 인덱스 번호
x<MAC> MAC 주소
p<bus>s<slot>[f<function>][d] PCI 방식

이에 의거하면 enp5s0이면 이더넷인데 PCI 방식을 사용하고, 5번 PCI 버스의 0번 슬롯을 이용 중이라는 뜻이다. 이런 방식으로 메인보드의 버스 번호만 보면 알 수 있다. 필자는 와이파이를 연결 중이라 wlp1s0라 뜬다. 그렇다면 무선 랜이고 PCI 버스의 1번 버스, 그리고 0번 슬롯을 사용 중인 것이다.

nmcli 실습

① nmcli로 커넥션을 down 시키고 show로 확인하기

# nmcli d
# nmcli con down <CONNECTION 이름>
# nmcli c s <CONNECTION 이름>

이전과는 다르게 대문자로 된 부분이 출력되지 않았다. 이번엔 다시 연결하고 확인한다.

# nmcli con up <CONNECTION 이름>
# nmcli c s <CONNECTION 이름>

다시 대문자 부분이 출력된다.

② nmcli 속성 변경해보기

NIC의 id가 한글로 ‘유선 연결1’로 되어 있는 등 device 이름과 다른 경우도 있다. CONNECTION ID를 device name과 통일시키는 작업(보통 통일하는 것이 좋다)은 아래와 같이 한다.

# nmcli d → 이름 확인
# nmcli con modify "유선 연결 1" connection.id ens33 → CONNECTION 이 '유선 연결 1'이었고, DEVICE가 ens33인 예이다.
# nmcil c → 변경 내용 적용 여부 커넥션 확인

③ IP주소 변경해보기

변경 전 현재 시스템의 IP 주소를 메모해둔다. DHCP 서버에서 받은 주소 중 IP, gateway만 기억해두면 된다.

# nmcli c s  → NAME 확인
NAME               UUID                                  TYPE      DEVICE 
iptime0000         a39cfdb5-d084-489c-97f6-fed78f3c5933  wifi      wlp1s0

# nmcli c s iptime0000

(앞부분 생략)
ipv4.method:                            auto → DHCP라는 뜻
(중간 생략)
IP4.ADDRESS[1]:                         192.168.0.4/24
IP4.GATEWAY:                            192.168.0.1

이제 nmcli 속성을 이용해 IP를 변경한다.

# nmcli c mod iptime0000 ipv4.method manual ipv4.addresses 192.168.9.4/24 ipv4.gateway 192.168.0.1 +ipv4.dns 8.8.8.8
    → modify를 하는데 iptime0000의 ipv4.method를 manual으로 바꿔 직접 IP 주소를 넣을 수 있게 한다.
    → ipv4.addresses는 'ipv4.addr'까지만 입력해도 무관하다. ipv4.addressess를 192.168.9.4/24로 바꾼다. 원래 주소는 세 번째 값이 0이었는데 이를 9로 바꾼 것이다.
    → ipv4.gateway는 192.168.0.1로 한다. 이 값은 조회한 값 그대로 써야 한다
    → ipv4.dns는 앞에 prefix로 +를 넣었으니 8.8.8.8을 추가하라는 의미이다(8.8.8.8은 구글이다.)

변경된 내용을 조회해본다.

# nmcli c s iptime0000

(앞 부분 생략)
ipv4.method:                            manual  → auto에서 바뀌어있다
ipv4.dns:                               8.8.8.8  → 입력한 DNS 주소로 바뀌어있다
ipv4.addresses:                         192.168.9.4/24  → 입력한 IP 주소로 바뀌어 있다
ipv4.gateway:                           192.168.0.1
(중간 생략)
IP4.ADDRESS[1]:                         192.168.0.4/24  → 기존의 값으로 유지되어 있다
IP4.GATEWAY:                            192.168.0.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 60
IP4.ROUTE[2]:                           dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 6
IP4.ROUTE[3]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1
IP4.DNS[1]:                             211.235.32.100
IP4.DNS[2]:                             164.124.101.2  → 추가했었던 8.8.8.8 DNS가 없다

다시 원래 상태로 되돌리기 위해서는 down을 했다가 up을 하면 된다. (라우팅 테이블의 변경 없이 IP 변경 정도를 반영하는 경우, up만 다시하면 된다.) 이를 동시에 수행하기 위해서 &&(AND) 연산으로 아래와 같이 할 수 있다.

# nmcli c down iptime0000 && nmcli c up iptime0000

Connection 'iptime0000' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

④ virtual IP 추가/삭제 하나의 디바이스에는 복수 개의 IP를 추가할 수 있다. 서버 등에서 자주 쓰인다.

# nmcli c mod <device name> +ipv4.addresses <virual IP 주소> → +이므로 추가
# nmcli c up <device name>  → connection up하면 추가한 IP가 활성화된다.

# nmcli c mod <device name> -ipv4.addresses <virual IP 주소> → -이므로 삭제

⑤ 기존 설정을 삭제했다가 다시 만들기 설정이 꼬인다던지 하여 아예 삭제했다가 다시 만들 수도 있다. 우선 삭제는 connection del을 쓴다.

# nmcli c del <device name>  → 해당 커넥션 삭제
# nmcil c s → 기존에 있던 줄이 없어졌을 것
# nmcli d s → 디바이스는 나오나 커넥션 이름이 없을 것

다시 만들려면 connection add 명령을 쓴다.

# nmcli c add con-name <커넥션 이름> ifname <인터페이스 이름> type <타입> ip4 <IP주소>
    → con-name은 커넥션의 이름이다
    → ifname은 인터페이스의 이름으로, 실제 디바이스의 이름을 넣는다
    → type에는 이더넷이면 ethernet으로 적는다

# nmcil c s → 확인

⑥ nmcli c s 에서 특정 속성을 검색하기 iptime0000 커넥션에서 ipv4.addr, ipv4.gateway, ipv4.dns를 보고 싶다면 아래와 같이 쓴다.

# nmcli c s iptime0000 | egrep '(ipv4.addr|ipv4.gateway|ipv4.dns)'

ss (socket status)

netstat (network stat)
ss가 나오기 이전의 구식 명령으로, 지금은 쓰지 않는다. 주로 네트워크의 상태를 확인하는 유틸리티이다.

ss는 socket statistics의 약어이다. netstat의 모든 기능을 포함하며 추가 옵션을 더하여 가지고 있다.

ss [options] [ filter ]

옵션은 아래와 같다.

options options 설명
-n –numeric numeric으로 표시하기
-a –all 전부 표시
-l –listening LISTEN 상태인 것 표시
-o –options  
-m –memory 메모리에 대해
-p –processes 프로세스들에 대해 표시
-i –info 상세 정보 표시
-4 –ipv4 IPv4에 대해
-6 –ipv6 IPv6에 대해
-t –tcp TCP에 대해

ss 옵션 사용 예

① TCP 커넥션 보기

ss -t :

위 사진은 네이버를 접속할 때 나타난 TCP 커넥션이다. 위에서 볼 수 있듯, 첫 열 State는 앞서 보았던 TCP 의 상태를 나타낸다.

② 메모리 보기

ss -m : m은 memory의 약어이다.

r은 read, w은 write 버퍼를 각각 말하며, f는 forward allocated memory, t는 transmit queue를 말한다.

③ TCP 상태 보기

ss state <상태> : 복수의 상태 지정 가능하다.

$ ss state established  → established 상태 보기

(생략)
u_str0      0                                                                         * 100164                                                       * 99272                                      
u_str0      0                                               /run/systemd/journal/stdout 43084                                                        * 43082                                      
u_str0      0                                                                         * 34842                                                        * 32296                                      
icmp60      0                                                                         *:ipv6-icmp                                                    *:*                                          
tcp  0      0                                                               192.168.0.4:38776                                           54.230.167.222:https                                      
tcp  0      0                                                               192.168.0.4:54650                                            117.18.237.29:http                                       
(생략)

$ ss -n4 state established  → numeric으로 IPv6만, established 상태인 것을 보여달라

Netid      Recv-Q       Send-Q              Local Address:Port                   Peer Address:Port       
tcp        0            0                     192.168.0.4:38776                54.230.167.222:443        
tcp        0            0                     192.168.0.4:33368                223.130.195.95:443        
tcp        0            0                     192.168.0.4:43404                64.233.189.188:5228       
tcp        0            0                     192.168.0.4:51598               223.130.195.208:443

close-wait와 fin-wait-2가 발생하면 매우 심각한 문제이다. 특히 close-wait는 버그에 해당하는 상황으로 정말 심각하며, close-wait가 발생한다면 자신 쪽의 문제, fin-wait-2가 발생한다면 상태편 문제이다. 이 상태가 발생하는지 확인하는 명령은 아래와 같다.

$ ss -nt state close-wait state fin-wait-2

$ watch -d -n 1 ss -nt state close-wait state fin-wait-2
   → watch로 1초마다 확인하는 명령

둘 다 위 사진처럼 아무것도 안 보이는 게 정상이다.

④ 통계 정보(statistics)보기

ss -s : 현재 열고 있는 소켓에 관한 정보가 나온다. 중요!

⑤ 소켓을 사용하고 있는 프로세스 정보 보기

ss -p : 소켓의 메타 정보를 읽기 위해서 루트 유저의 권한을 필요로 할 수도 있다. 두 상태에서 보여지는 정보가 다르다.

아래 사진은 일반 유저 상태이다.

아래 사진은 루트 유저 상태이다.

마지막 괄호는 (“실행파일 이름”, pid 값, fd 값)으로 되어 있다.

⑥ 내부 TCP 정보 보기

ss -t -i

네트워크를 다루는 사람들에겐 상자 친 부분이 중요하다고 한다.

ss 필터 사용 예

① address, port filter

IP 주소, CIDR, Port 번호 등을 지정해 필터링할 수 있다. IP, CIDR 표기를 할 때는 dst(destination), src(source)로, 포트 번호를 표기할 때는 dport, sport로 한다. 연잔사는 symbolic, literal 방식을 모두 지원하나, 보통은 후자가 더 낫다.

$ ss -n dport = :22
    → dport = :ssh 로 표기해도 된다
$ ss -n 'dport = :22'
    → single quote로 묶는 것이 좋다

$ ss -n 'src 192.168.110.134'
    → 해당 IP 주소로 출발하는 내용 출력
$ ss -n 'src 192.168.110.134 and src 192.168.110.167'
    → and로 여러 개 검색
$ ss -n 'src 192.168.110.0/24'
    → 서브넷 마스크가 24이므로 192.168.110으로 시작하는 주소는 모두 해당
$ ss -n 'src 192.168.110.134'
    → 해당 IP 주소로 출발하는 내용 출력

$ ss -n '( dport = :ssh or sport = :ssh ) and src 192.168.110.134'
    → 소괄호 옆 공백은 필요하다!

$ ss -n 'dport > :8000'
$ ss -n 'dport > :8000 and dport < :20000'
$ ss -nlt 'sport le 1023'

ss와 함께 쓰이는 명령어

lsof(list open file)은 열린 파일을 검색하고, fsuer는 특정 유저가 열고 있는 파일을 검색한다. 특정 소켓이 열려 있는지, 특정 소켓 주소를 점유하고 있는 프로세스가 무엇인지 등을 찾을 때 주로 쓴다.


querying

ping

ping [-c count] [-i interval] [-s size] [-t ttl] target : 상대 호스트(target)가 응답(존재, 연결)을 확인한다. 사실상 대다수 시스템들은 방화벽으로 이 확인을 막아두는 경우가 많아서 사용이 잘 안되긴 하지만 간혹 쓰는 경우도 있다. count를 지정하지 않으면 계속 보내게 되며, interval을 지정하지 않으면 초단위로 보낸다. ^C로 ping을 중단하면 마지막에 통계 정보를 보여준다. RTT 정보가 나온다.

$ ping -c 3 192.168.0.1
$ ping -c 2000 -i 0.2 -s 1000 192.168.0.1

traceroute

패킷의 도달 경로를 확인한다. 패킷이 어떤 라우터를 거쳐갔는지 알 수 있다.

$ traceroute -n 63.99.207.68

arp

arp : ARP(Address Resolution Protocol) 테이블은 IP 주소(logical address)와 MAC 주소(physical address)를 매칭하는 표이다.

# arp

Address                  HWtype  HWaddress           Flags Mask            Iface
_gateway                 ether   88:36:6c:ed:73:60   C                     wlp1s0

Address는 IP주소이고, HWaddress는 MAC 주소이다.

arp -s <MAC 주소> <IP 주소> : 자주 쓰는 방법은 아니지만, 특정 MAC 주소에 특정 IP 주소를 할당할 때 쓴다.

resolver

resolver는 name service로, IP 주소나 hostname(FQDN, alias)를 해석한다. name server인 것이다.이를 이용해 특성 서버의 이름을 질의할 수 있다. (resolver client) nslookup이란 명령어(유틸리티)는 사용하지 않고, dig을 사용한다.

dig [@server] <target\> : [@server]은 질의할 네임 서버를 직접 지정하는 것이다. 지정하지 않으면 /etc/resolv.conf에 있는 네임 서버에 질의한다.

상자 친 부분은 질의하는 데 걸리는 시간이다.

유명한 네임 서버는 아래와 같다. 알아두면 좋다

nameserver 설명
1.1.1.1 Cloudflare DNS
208.67.222.222 CISCO openDNS
208.67.200.200 CISCO openDNS
8.8.8.8 google DNS

네트워크 개발 유틸 ethtool

네트워크 카드에 대해 질의하거나 설정을 잡는 툴이다. ‘이 티 에이치 툴’이라고 읽는다. ⭐ ethtool <장치 이름> : 해당 장치 이름에 대한 설정값을 알려준다.

ethtool -s <장치 이름> speed <속도값(Mb/s)> duplex full : 간혹 시스템이 느려질 경우 duplex 문제일 경우가 있다. 위처럼 조회했을 때 속도가 매우 느리게 되어 있더나 Duplex: Half으로 단방향이 될 수 있다. 특정 프로그램이나 powersave 모드 설정 등의 원인이 있다. 이렇게 속도와 duplex를 수동으로 바꿀 수 있다.

ethtool -s <장치 이름> autoneg <on|off> : 자동으로 링크 속도를 협상하는 기능으로 auto-negociation 이 있고, 켜고 끌 수 있다.

ethtool -S <장치 이름> : 여기서도 통계 정보를 볼 수 있다.

ethtool -k <장치 이름> → 보기

ethtool -k <장치 이름> <param\> <on|off> → 켜고 끄기 : offloading으로 CPU가 할 일을 덜어주는 기능을 활성화/정지할 수 있다. 되도록 켜져있는 상태로 두는 것이 좋다.


ssh server

ssh

Secure Shell의 약어로, 통신 구간 암호화 서비스이다. 기존의 telnet은 암호화 되지 않은 통신이었으며 현재는 telnet의 프로토콜 테스트 기능은 nc, curl로 대체된다. 리눅스 서버들은 기본으로 ssh 서비스를 탑재하고 있으며, 없다면 설치하는 것이 좋다. 리눅스의 ssh는 openssh를 쓴다.

deprecated
중요도가 떨어져 더 이상 사용되지 않고 앞으로는 사라지게 될 (컴퓨터 시스템 기능 등)

ssh는 서버와 클라이언트로 이루어져 있다. sshd(ssh daemon)는 ssh server를 말한다. ssh는 ssh client이다. 명령어 ssh가 ssh clinet CLI 유틸리티에 해당한다. 리눅스, 유닉스 계열에선 ssh client GUI가 따로 제공되지 않고 터미널에서 ssh CLI 명령어로 실행된다. 반면 MS Windows 계열은 putty나 mobaXterm 같은 툴로 접속한다.

sshd 서버 준비작업

① sshd 서버가 설치되었는지 확인

# apt list openssh*
# apt install openssh-server

RH 계열은 rpm -qa openssh-server, yum -y install openssh-server로 확인 및 설치한다.

openssh-client 쪽은 upgrade해야 하고, openssh-server 쪽은 설치가 안 되어 있다. 양 쪽에 [installed] 표시가 되어 있어야 한다.

② sshd 서비스가 실행중인지를 확인

대부분은 systemd 기반이므로 systemctl로 확인한다.

active, running이라고 뜨고 있으면 잘 실행중인 것이다. 정지된 상태일 경우 systemctl start sshd를 실행한다. 만약 부팅 시 sshd 서비스가 실행되도록 하려면 systemctl enable sshd라고 한다. 여기에 –now 옵션 추가 시 start 기능까지 추가된다.

③ sshd가 LISTEN 상태를 확인

역시 루트 권한으로 ss -nlt 또는 ss -nltp을 실행한다. ssh는 포트번호로 22번을 사용하므로 22번에 해당하는 것을 보면 된다. (n: numeric으로 보여달라, l: listen 상태인 것을 보여달라, t: tcp, p: 프로세스 이름까지 보여달라)

22번이 두 개가 나오는데 *:22에서 *는 INADDR_ANY로 IPv4의 0.0.0.0을 말하고, :::22는 IPv6의 번호이다. 앞서 본 바와 같이 리눅스에서는 두 주소 체계 모두 지원하기 위해 스택을 두 개 가지고 있기 때문에 여기서도 두 개가 보이는 것이다.

④ 방화벽 허용 여부 확인

ssh port(22/tcp) 22번이 LISTEN 상태이더라도 통신이 안될 수 있는데, 이때는 방화벽으로 막혔는지, 허용되어 있는지 확인해봐야 한다. iptables -nL 명령어를 사용한다.

사진에서 볼 수 있듯 아무것도 막혀 있지 않은, 모두 허용된 상태(방화벽 비활성)이다.

방화벽을 켜고 끄며 상태를 확인하는 것은 아래와 같이 한다.

ufw status : : 방화벽 inactive/active 상태 확인

ufw enable/disable : : 방화벽 활성화/비활성화 시키기

ufw allow <port_num|port_symbol>[/protocol] : : 특정 포트 번호에 방화벽 허용하기

# ufw allow 22/tcp → 22 대신 ssh 써도 된다
# ufw allow http/tcp → http 대신 80 써도 된다

ssh client

ssh [-p port] [username@]<host address\> :

ssh 192.168.52.110  → id가 없으니 지금 로그인한 유저명으로 작동. 포트번호 ssh 기본 22
ssh linuxer@192.168.52.110  → 포트번호 ssh 기본 22
ssh -p 20022 192.168.52.110

@는 at이라 읽는다

ssh 접속은 보안을 고려해 키를 기반으로 할 때가 많은데, 이 ssh key를 생성하는 방법을 알아보자.

ssh-keygen : ssh 키를 생성한다. key는 ~/.ssh에 저장된다. 옵션 -N을 붙이면 new passphrase이다.

$ ssh-keygen -N ""

""은 passphrase를 쓰지 않는단 뜻이다. 개인용에서는 비밀번호를 쓰지 않으나, 기업에서는 패스워드를 사용해 -N 뒤에 "" 대신 값을 넣어주는 것이 좋다. 키를 풀 때마다 해당 값을 입력해야 하는 것이다.

passphrase: 일반적인 비밀번호보다 길이가 길고 기억하기 쉬운 문장을 활용하는 방법

키를 생성했으니, 접속할 서버로 복사하는 기능도 있다.

ssh-copy-id <유저명@><접속할 상대 서버 주소> : 해당 명령은 ~/.ssh/authorized_keys에 복사하는 과정이다.

$ ssh-keygen -N ""
$ ssh-copy-id lumos@192.168.52.100  → 설정한 다음부터는
$ ssh lumos@192.168.52.100  → 암호를 물어보지 않고 바로 접속할 수 있다. (처음엔 copy해야 하니까 한 번 물어봄)

단순히 연결 뿐만 아니라 연결할 서버에서 실행한 결괏값을 가져올 수도 있다.

$ ssh -t lumos@192.168.52.100 w

w 자리는 명령에 해당하며, 해당 서버에서의 명령어 실행 결괏값을 나에게 알려준다. 일회성 실행 등에서 자주 쓴다.


HTTP 관련 유틸

curl

‘씨 유알엘’이라고 읽는다. HTTP나 HTTPS 등 URL 기반 통신 기능(프로토콜)을 제공하며, CLI tool과 library(libcurl)를 제공한다. 따라서 다양한 프로그래밍 언어에서 프로그래밍이 가능해진다.

curl [options] <URL\>

만약 내용이 너무 길어서 파일로 저장하고 싶다면 옵션 -o를 붙여 저장할 수 있다.

$ curl -o https://www.mycompany.com/docs/manual.html    → 직접 문서 형태로 되어 있는 경우
$ curl -o nate.html https://www.nate.com    → URI에 파일명이 없어 -o 옵션 뒤에 직접 파일명을 지정한 경우

큰 파일 등 파일을 다운로드 받을 때도 쓸 수 있다.

curl -C - -O <파일\>

curl -C - -O http://blah.org/blah.iso

-O 옵션으로 외부 파일(remote)을 지정하고, -C -를 쓰면 중간에 다운로드 받다 끊어져도 어디까지 받았는지 알아내 거기서부터 받을 수 있다.

API 서버에서 특정 값을 받아올 때도 쓸 수 있다.

curl <API URL\>

$ curl v2.wttr.in/Seoul
→ 콘솔 등에서 날씨 정보를 받아오는 API 서버.
이를 alias로 설정해 쓰는 사람들이 많다

wget

‘더블유 겟’ 이라고 읽으며, curl과 대부분의 기능이 비슷하다. 다만 파일 다운로드에 특화되거나 웹사이트 복제(mirroring) 등에 유용히 쓰인다.

wget <URL\>

nc

net cat의 약자로, 명령어 cat이 읽는 기능을 가진 것처럼, 네트워크를 읽는다는 뜻이다. 서버와 클라이언트 양쪽 기능이 가능하다. 간단한 간이 서버 & 클라이언트로 사용할 수 있으며, 바이너리 통신도 된다.

$ nc -k -l 5000 
    → -l 옵션으로 listen 포트를 지정해 서버 쪽으로 띄운다. 해당 예에는 TCP 5000번으로 뜬다.

창을 하나 더 열어 해당 서버로 접속하려 한다면

$ echo Hello | nc 127.0.0.1 5000
    → 127.0.0.1은 루프백 주소로, nc 로 가동중인 것도 본인이므로 본인 IP 주소로 접속한다
    → 해당 서버로 접속해 명령을 시행한다

또는 interactive mode로 아래와 같이 동일한 기능을 할 수도 있다.

$ nc 127.0.0.1 5000


무선 네트워크 설정(Wifi)

NetworkManager(=NM)이 도입된 이후 무선(wireless) 부분도 NM으로 통합되어, wicd 역시 deprecated되었다. wicd 설치했다면 삭제!

nmcli radio 명령으로 무선 네트워크들이 enabled되었는지 확인할 수 있다.

nmcli r[adio] wifi [on|off] : 와이파이를 끄거나 켜는 명령어로, on/off를 생략하면 상태를 보여준다.

# nmcli radio → 전체 무선 통신
WIFI-HW  WIFI     WWAN-HW  WWAN    
enabled  enabled  enabled  enabled 

# nmcli r wifi
enabled

만약 와이파이가 disabled되어 있다면 block이 되어있는지 우선적으로 살펴본다.

rfkill list

# rfkill list
0: hci0: Bluetooth
	Soft blocked: yes
	Hard blocked: no
1: phy0: Wireless LAN
	Soft blocked: no    → 이곳이 yes라면 SW 적으로 블럭된 경우로, rfkill unblock [#|all]으로 해제 가능
	Hard blocked: no    → 이곳이 yes라면 HW 적으로 블럭된 경우로, BIOS에 들어가 확인이 필요하다.

hard blocked는 랩탑에선 Fn + F5 같은 기능에 와이파이 on/off 기능이 있어 이로 인해 disabled 되었을 수도 있고, sleep 모드에서 배터리 절약, 혹은 비행기 모드에서 disabled 될 수도 있다.

nmcli dev에서 TYPE이 wifi인 디바이스가 있어야 와이파이가 정상 작동 중이다.

# nmcli dev
DEVICE  TYPE      STATE        CONNECTION 
wlp1s0  wifi      connected    iptime0000

nmcli dev wifi : 연결할 수 있는 공유기 리스트를 다 보여준다.

# nmcli dev wifi
IN-USE  SSID        MODE   CHAN  RATE        SIGNAL  BARS  SECURITY 
*       iptime0000  Infra  5     270 Mbit/s  81      ▂▄▆█  WPA2

nmcli dev wifi rescan : 와이파이 목록을 다시 스캔한다

nmcli dev wifi connect <SSID\> [password <비밀번호>] : 해당 SSID를 가진 와이파이에 연결한다. 만약 open AP여서 비밀번호가 필요 없다면 password는 지정하지 않아도 된다.

nmcli dev disconnect <ifname\> : 와이파이 연결을 해제한다. ‘ifname’은 인터페이스 이름이라는 뜻이다.

와이파이 hotspot

hotspot은 AP mode라고도 하며, 공유기 역할을 하게 만드는 것이다. hotspot을 만드는 방법은 간단하게는 nmcli를 쓸 수 있다.

핫스팟 커넥션을 켜는 단계는 매우 길기 때문에 단계별로 나누어 커넥션을 열고 지정한다.

nmcli c[onnection] add type wifi ifname '*' con-name <핫스팟 이름> autoconnect no ssid <SSID\> : 와이파이 타입으로 커넥션을 만든다. 여기서 SSID 부분은 외부에서 조회했을 때 보여지는 이름이다.

nmcli c mod <핫스팟 이름> 802-11-wireless.mode ap 802-11-wireless.band <밴드 값> ipv4.method shared ipv4.addresses <핫스팟 IP 주소> : 모드(802-11-wireless.mode)는 ap로 하고, 밴드(802-11-wireless.band)를 지정하며(bg이면 2.4G), ipv4.method는 shared로, ipv4.addresses는 해당 주소로 한다.

nmcli c mod <핫스팟 이름> 802-11-wireless-security.key-mgmt wpa-psk 802-11-wireless-security.psk <psk\> : 보안 키, psk도 설정한다. 802-11-wireless-security는 wifi-sec로 단축 가능하다.

nmcli c up <핫스팟 이름> : 해당 핫스팟을 활성화한다. 다른 기기에서도 볼 수 있다. nmcli c s로 본인이 만든 핫스팟을 확인할 수 있다.

nmcli -p c s <핫스팟 이름> : 핫스팟의 정보를 출력한다.

IP4.ADDRESS[1]이 AP의 IP 주소 범위이다. 서브넷 마스크가 24이므로 자기 자신인 ~.~.~.1을 제외하고 2~254까지 할당 가능 범위가 된다.

핸드폰에서 보았을 때 잘 뜨는 것을 확인할 수 있다.

nmcli c down <핫스팟 이름> : 해당 커넥션을 끊는다.

arrow_upward arrow_downward
loading