이 글에서는 Linux CentOS/RHEL 7/8 환경에서 네트워크를 구성하는 방법을 다룹니다. 설정 파일을 이용한 네트워크 인터페이스 구성 방법과 기본적인 네트워크 설정 도구의 사용법까지 살펴보겠습니다. 서버 구축의 첫걸음은 네트워크 설정이기 때문에 매우 중요한 주제입니다.
RHEL/CentOS 7에서는 표준 network 서비스를 이용한 네트워크 구성 방법을 중심으로 설명하고, CentOS/RHEL 8에서 기본으로 제공되는 NetworkManager(NM)를 활용한 네트워킹 구성 방법도 함께 알아봅니다.
RHEL/CentOS의 네트워크 인터페이스 명명 규칙
Linux의 전통적인 네트워크 인터페이스 명명 방식은 eth0, eth1과 같은 이름을 사용합니다. 하지만 이러한 이름은 인터페이스와 고정적으로 연결되어 있지 않아, 재부팅 후 여러 인터페이스가 서로 다른 이름을 가질 수 있습니다. 이는 firewalld나 iptables로 방화벽을 구성할 때 문제를 일으킬 수 있습니다.
이러한 이유로 RedHat 7과 CentOS 7부터는 여러 명명 체계의 계층 구조를 기반으로 네트워크 인터페이스 이름을 할당하기로 했습니다. 기본적으로 systemd는 사용 가능하고 적용 가능한 명명 체계를 순서대로 적용합니다. 네트워크 장치 이름은 자동으로 할당되며, 하드웨어가 추가되거나 변경되더라도 그대로 유지됩니다. 반면 이런 인터페이스 이름은 enp5s0이나 ens3처럼 전통적인 eth0, eth1에 비해 가독성이 떨어지는 단점이 있습니다.
다음 절차를 따르면 기존의 Linux 인터페이스 이름 방식으로 되돌릴 수 있습니다.
/etc/default/grub 파일을 편집합니다:
# nano /etc/default/grub
GRUB_CMDLINE_LINUX 라인에 다음 내용을 추가합니다:
net.ifnames=0 biosdevname=0
전체 GRUB 라인 예시는 다음과 같습니다:
GRUB_CMDLINE_LINUX="consoleblank=0 fsck.repair=yes crashkernel=auto nompath selinux=0 rhgb quiet net.ifnames=0 biosdevname=0"
GRUB 설정을 갱신합니다:
# grub2-mkconfig -o /boot/grub2/grub.cfg
네트워크 인터페이스 설정 파일의 이름을 변경합니다:
# mv /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-eth0
그리고 DEVICE 값을 변경합니다:

파일을 저장하고 호스트를 재부팅한 후 변경 사항이 적용되었는지 확인합니다:
# ip a

이제 인터페이스 이름이 eth0으로 변경된 것을 확인할 수 있습니다.
CentOS/RHEL 설치 중 초기 네트워크 구성
CentOS Linux 설치 과정에서 메뉴의 “Network & Hostname” 항목을 클릭하면 그래픽 모드로 네트워크 인터페이스를 구성할 수 있습니다. 이 화면에서 서버 이름을 지정하고 IP 주소, 게이트웨이, DNS 등을 추가할 수 있습니다.
CentOS/RHEL에서 네트워크 인터페이스 설정 파일 편집 방법
먼저 Linux 호스트에서 사용 가능한 네트워크 인터페이스 목록을 확인합니다:
# ip a
Linux 호스트의 네트워크 설정 파일은 /etc/sysconfig/network-scripts 디렉터리에 저장됩니다. NetworkManager 데몬이 각 네트워크 인터페이스별로 이 파일들을 생성합니다. 본 예제에서는 설정 파일 이름이 ifcfg-eth0입니다(인터페이스 명명 체계에 따라 파일 이름은 다를 수 있습니다).
주요 파라미터를 살펴보겠습니다:
DEVICE– 시스템상의 어댑터 이름과 일치하는 네트워크 어댑터 이름(예제에서는 eth0)BOOTPROTO– IP 주소 할당 방식(static은 수동 입력, dhcp는 자동 할당)IPADDR– IP 주소NETMASK– 넷마스크GATEWAY– 기본 게이트웨이DNS1– 1차 DNS 서버DNS2– 보조 DNS 서버ONBOOT– 네트워크 인터페이스 시작 방식(yes — 자동, no — 수동)UUID– 네트워크 인터페이스의 고유 식별자. uuidgen 명령으로 직접 생성할 수 있습니다IPV4_FAILURE_FATAL– 잘못된 구성일 경우 IPv4 네트워크 인터페이스 비활성화 여부(yes — 비활성화, no — 활성 상태 유지)IPV6_FAILURE_FATAL– 잘못된 구성일 경우 IPv6 네트워크 인터페이스 비활성화 여부(yes — 비활성화, no — 활성 상태 유지)IPV6_AUTOCONF– IPv6 자동 구성 허용 또는 차단IPV6_INIT– IPv6 주소 체계 사용 여부(yes — 사용, no — 미사용)PEERROUTES– DHCP 사용 시 기본 게이트웨이 구성 우선순위 설정IPV6_PEERROUTES– IPv6에서 DHCP 사용 시 기본 게이트웨이 구성 우선순위 설정
이 정보를 바탕으로 네트워크 인터페이스를 구성해 보겠습니다.
CentOS/RHEL에서 고정(Static) IP 주소 설정 방법
네트워크 설정 파일을 열어 편집합니다:
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

이 예제에서는 고정 IP 주소, 서브넷 마스크, 게이트웨이, 여러 DNS 서버를 지정했습니다. 부팅 시 인터페이스가 자동으로 활성화되도록 설정합니다:
ONBOOT="yes"
변경 후 network 서비스를 재시작합니다. 정상적으로 처리되면 아래와 같은 출력이 표시됩니다:
# service network restart
Restarting network (via systemctl): [ OK ]
또한 모든 연결 프로필을 리로드하는 방법도 있습니다:
# nmcli connection reload
DHCP로 동적 IP 주소 받는 방법
서버가 네트워크의 DHCP 서버로부터 동적 IP 주소를 받아야 한다면, 인터페이스 설정 파일을 열어 설정을 변경합니다:

IP 주소 및 마스크 관련 파라미터를 모두 제거하고, IP 할당 방식을 dhcp(BOOTPROTO="dhcp")로 변경했습니다. 모든 변경을 마친 후에는 network 서비스를 재시작하는 것을 잊지 마세요.
RHEL/CentOS에서 IPv6 비활성화 방법
IPv6는 아직 널리 활성화되어 있지 않아 많은 관리자들이 가능하면 IPv4를 선호합니다. IPv6 프로토콜을 사용하지 않는다면 서버에서 비활성화하는 것이 좋습니다. 어떤 서비스도 IPv6로 작동하도록 구성되어 있지 않다고 확신한다면 바로 네트워크 인터페이스 구성으로 진행해도 됩니다. 그렇지 않다면 먼저 확인 작업을 하는 것이 안전합니다. 어떤 서비스가 IPv6를 사용하는지 점검하고 해당 서비스 설정에서 프로토콜을 비활성화해야 합니다. 다음 명령을 실행합니다:
# netstat -tulnp

테스트 서버의 경우 ":::" 표시로 알 수 있듯이 sshd와 chronyd만 IPv6를 사용하고 있습니다.
네트워크 구성에서 IPv6를 비활성화한 후 문제가 발생하지 않도록, 서버에서 IPv6를 사용하는 서비스들에 대해 개별적으로 프로토콜을 비활성화합니다. 예를 들어 sshd 설정 파일을 엽니다:
# mcedit /etc/ssh/sshd_config
다음 줄의 주석을 해제합니다:
#AddressFamily any
#ListenAddress 0.0.0.0
그리고 서비스를 재시작합니다:
# service sshd restart

이제 sshd에서 IPv6를 더 이상 사용하지 않는 것을 확인할 수 있습니다. 다른 서비스에도 동일하게 적용합니다.
이제 네트워크 설정에서 IPv6 프로토콜을 비활성화합니다. /etc/sysctl.conf 파일을 열고:
# nano /etc/sysctl.conf
다음 줄을 추가합니다:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
파일을 저장하고 다음 명령으로 변경 사항을 적용합니다:
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
그다음 /etc/sysconfig/network 파일을 열어 다음 구성을 추가합니다:
NETWORKING_IPV6=no
IPV6INIT=no

네트워크 인터페이스 설정 파일 /etc/sysconfig/network-scripts/ifcfg-eth0에서 다음 줄을 제거합니다:
IPV6INIT="yes"
마지막으로 GRUB에서 IPv6 사용을 차단합니다:
# nano /etc/default/grub
GRUB_CMDLINE_LINUX 라인 끝에 다음을 추가합니다:
ipv6.disable=1

모든 변경을 마친 후 파일을 저장하고 GRUB을 갱신합니다:
# grub2-mkconfig -o /boot/grub2/grub.cfg
서버를 재부팅하고 네트워크 구성을 확인합니다:
# ifconfig
서버에서 IPv6 프로토콜이 비활성화되었습니다.
CentOS/RHEL에서 DNS 네임서버 설정
/etc/resolv.conf 파일을 사용하거나 네트워크 인터페이스 설정에서 지정하여 호스트의 DNS 네임서버를 구성할 수 있습니다. Linux 네트워크 인터페이스의 고정 구성을 설정할 때 이미 다음 파라미터로 DNS 서버를 지정했습니다:
DNS1=
DNS2=
DNS3=
필요한 DNS 서버를 설정하고 network 서비스를 재시작합니다.
DNS 네임서버는 네트워크 설정 파일에서 가져와 /etc/resolv.conf에 자동으로 등록됩니다. 네트워크 구성 시 DNS 서버를 지정하지 않았다면 /etc/resolv.conf에 수동으로 입력하세요:
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 8.8.4.4
RHEL/CentOS에서 하나의 네트워크 인터페이스에 여러 IP 주소 할당
하나의 네트워크 인터페이스에 여러 IP 주소를 사용하려면 인터페이스 별칭(alias)을 통해 구성하거나, 기본 설정 파일에 추가 IP 주소를 지정하면 됩니다.
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
다음과 같이 수정합니다:
# Generated by parse-kickstart
UUID="b8bccd4c-fb1b-4d36-9d45-044c7c0194eb"
IPADDR1="*.*.*.*"
IPADDR2="*.*.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
DNS1=1.1.1.1
DNS2=8.8.8.8
DNS3=8.8.4.4
각 항목의 의미는 다음과 같습니다:IPADDR1 – 첫 번째 IP 주소IPADDR2 – 두 번째 IP 주소GATEWAY – 기본 게이트웨이
또는 기본 설정 파일의 별칭(alias) 파일을 생성할 수도 있습니다:
# nano /etc/sysconfig/network-scripts/ifcfg-eth0:1
여기에 필요한 설정을 추가하되, 게이트웨이는 지정하지 않습니다:

모든 설정을 마친 후 네트워크 서비스를 재시작합니다:
# service network restart
참고로 Windows에서도 하나의 네트워크 인터페이스에 여러 IP 주소(별칭)를 구성할 수 있습니다.
RHEL/CentOS에서 VLAN(802.1Q) 태깅 구성
CentOS/RHEL/Fedora에서 네트워크 인터페이스에 여러 VLAN을 구성하는 방법은 "How To Configure 802.1Q VLAN Tagging on RHEL/CentOS Linux" 문서에서 자세히 다루고 있습니다.
RHEL/CentOS에서 여러 네트워크 인터페이스 구성
서버에 네트워크 인터페이스가 여러 개 있다면 각각 다른 IP 주소를 지정할 수 있습니다. 서버에 네트워크 인터페이스가 두 개 이상이라면 "ip a" 명령으로 이를 확인할 수 있습니다:
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:52:42:54:2c:36 brd ff:ff:ff:ff:ff:ff
inet 15.*.*.*/16 brd 15.*.*.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:52:42:54:2c:b8 brd ff:ff:ff:ff:ff:f
두 번째 인터페이스를 구성하려면 해당 파일을 생성합니다:
# nano /etc/sysconfig/network-scripts/ifcfg-eth1
그리고 다음 구성을 추가합니다:
IPADDR="*.*.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth1"
ONBOOT="yes"

그다음 서버의 기본 게이트웨이를 설정해야 합니다. 현재 설정된 게이트웨이를 확인하고 필요하다면 변경합니다:
# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 15.*.*.1 0.0.0.0 UG 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
15.*.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
15.*.*.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
현재 eth1 인터페이스가 기본 게이트웨이입니다. eth0을 사용하도록 변경하겠습니다:
# route add default gw *.*.*.*
– 게이트웨이를 eth0에 지정된 값으로 교체합니다.
# route delete default gw *.*.*.*
— eth1의 게이트웨이를 제거합니다.

서버 재부팅 후에도 이 설정을 유지하려면 해당 명령들을 rc.local에 추가해야 합니다(RHEL/CentOS 부팅 시 서비스 자동 시작 관련 문서 참조).
RHEL/CentOS에서 유용한 네트워킹 명령어
ifdown eth1— 지정된 네트워크 인터페이스 비활성화ifup eth1— 지정된 네트워크 인터페이스 활성화ifconfig— 모든 네트워크 인터페이스 정보 표시ifconfig -a | grep ether | gawk '{print $2}'— 인터페이스의 MAC 주소 출력ip a | grep ether | gawk '{print $2}'— 위와 동일한 기능을 ip a로 수행service network restart또는systemctl restart network— systemctl을 통한 네트워크 서비스 재시작systemctl restart NetworkManager.service— NM(NetworkManager) 재시작ip route또는ip route show— Linux 라우팅 테이블 표시ping host— 지정된 호스트에 ping 테스트whois domain— 도메인의 whois 정보 표시dig domain— 도메인의 DNS 정보 표시
RHEL/CentOS의 네트워크 관리 도구
서버가 오랫동안 운영되었거나 본인이 구성하지 않은 서버라면, 가장 먼저 서버에 어떤 인터페이스가 있는지 파악해야 합니다. 편의를 위해 기본 저장소에서 필요한 도구를 설치합니다:
# yum install net-tools -y
설치 후 ifconfig를 사용할 수 있습니다:
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 15.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255
네트워크 인터페이스 이름이 eth0인 것을 확인할 수 있습니다.
net-tools를 설치하지 않았다면 다음 명령으로 인터페이스를 확인할 수 있습니다:
# ip a
출력 결과는 거의 동일합니다.
CentOS/RHEL 8에서 NetworkManager를 이용한 네트워크 관리
RHEL/CentOS 8에서는 네트워크 구성 시 NetworkManager만 사용하는 것이 권장됩니다. 이 서비스는 네트워크 연결을 관리하고, 설정을 제어하며, 네트워크 어댑터에 변경 사항을 적용합니다.
NM 상태를 확인하려면 다음 명령을 사용합니다:
# systemctl status NetworkManager.service

CentOS는 네트워크 구성을 위해 명령줄 콘솔 nmcli 또는 그래픽 도구 nmtui를 제공합니다.
네트워크 구성 모드로 진입하려면 다음 명령을 입력합니다:
# nmtui

첫 번째 항목을 선택하면 편집할 네트워크 인터페이스를 선택하는 창이 나타납니다:

인터페이스를 선택하고 편집합니다:

장치 이름, IP 주소, 게이트웨이, DNS 서버를 편집할 수 있습니다. 또한 NM 대화형 메뉴에서 IP 주소 할당 방식을 DHCP로 변경할 수 있습니다:

“manual”을 “automatic”으로 변경합니다:

그런 다음 변경 사항을 저장합니다. nmtui를 사용하면 설정 파일에서 하는 것과 동일한 구성 작업을 그래픽 모드로 수행할 수 있습니다. 명령 프롬프트로 인터페이스를 구성하는 것을 선호한다면 nmcli를 사용하세요. 예를 들어 다음 명령들은 eth1의 IP 주소, 게이트웨이, DNS 서버를 변경합니다:
# nmcli con mod eth1 ipv4.addresses 192.168.11.24/24
# nmcli con mod eth1 ipv4.gateway 192.168.11.1
# nmcli con mod eth1 ipv4.dns "8.8.4.4"
변경 사항을 적용하려면 인터페이스를 재시작합니다:
# nmcli con up eth1
설정 파일로 작업하는 것이 더 편하다면 yum으로 특수 패키지 network-scripts(기본적으로 CentOS 8에는 포함되어 있지 않음)를 설치하세요.
# yum install network-scripts -y
Upgraded:
initscripts-10.00.1-1.el8_0.1.x86_64
Installed:
network-scripts-10.00.1-1.el8_0.1.x86_64 network-scripts-team-1.27-10.el8.x86_64
Complete!
설치 후에는 앞서 설명한 대로 설정 파일에서 네트워크 설정을 편집할 수 있습니다.