배경
가끔 세상을 살다보면, 리눅스 인터페이스를 바꿀 때가 필요할 수 있다. 기존 리눅스의 경우 eth0
, eth1
과 같은 인터페이스 이름을 썼는데, 최근의 리눅스 배포를 보면 ens192
, ens224
와 같은 인터페이스 이름을 기본으로 설정해준다. 이게 불편할 때가 있다. 예를 들어, 오픈스택에서 PackStack을 통해 멀티 노드 환경을 만들어줄 때 그렇다.
여러 노드에서 통일된 인터페이스 이름을 가져야지 (안그래도 설치하기에 운이 따르는) PackStack이 잘 설치될 수 있다. 그래서 이번에는 CentOS 8에서 네트워크 인터페이스 이름을 변경해보도록 한다.
ens192
->eth0
: 외부 접속 용도 (192.168.100.0/24)ens224
->eth1
: 내부 인스턴스 사이의 Tunnel 용도 (10.0.20.0/24)
이 내용은 수많은 삽질과 네트워크를 날려먹고 완성시킨 내용이다. 여러분의 환경에서 동작을 안할 수도 있다.
Grub 설정
/etc/default/grub
를 설정해준다.
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cs-swap rd.lvm.lv=cs/root rd.lvm.lv=cs/swap rhgb quiet"
이런 느낌일텐데,
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cs-swap rd.lvm.lv=cs/root rd.lvm.lv=cs/swap rhgb quiet net.ifnames=0 biosdevname=0"
이렇게 GRUB_CMDLINE_LINUX
를 바꿔준다. 이렇게 변경이 된 grub 파일은 다음의 명령어로 boot에다가 적용시켜준다.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Udev에 Rule 추가
udev에 Rule을 추가하기 위해서는 각 인터페이스의 MAC 주소를 확인해야한다. 이는 그냥 평소에 쓰는 ifconfig
로 확인할 수 있다. 예를 들어, 우리의 인터페이스와 다음과 같다고 가정하자:
ens192
: 00:0c:29:64:99:65 (eth0 로 사용 예정)ens224
: 00:0c:29:64:99:6f (eth1 로 사용 예정)
이제 /etc/udev/rules
에다가 규칙을 추가해준다. 규칙 이름은 70-persistent-net.rules
로 하겠다. 따라서
sudo vim /etc/udev/rules.d/70-persistent-net.rules
를 통해 편집을 시작하고, 다음의 내용을 적어주자.
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:64:99:65", ATTR{type}=="1", KERNEL=="eth*", name="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:64:99:6f", ATTR{type}=="1", KERNEL=="eth*", name="eth1"
저기에서 ATTR{address}
부분에 원하는 MAC 주소, name
에 인터페이스 이름을 적어주면 된다.
여기까지 하고 부팅을 하면 인터페이스 이름은 바뀌어 있을텐데, IP를 못받았을 것이다. 따라서, 다음의 단계를 통해서 IP를 할당받도록 설정한다.
network-scripts 설정
다시 말하지만, 위의 단계까지 진행을 했다면, 인터페이스 이름은 변경이 되어있을텐데, IP를 할당받지 못했을 것이다. 그래서 만일 reboot
를 한다면, 지금 이 단계까지 진행하고 해야 네트워크를 날려먹지 않을 수 있다. 위의 udev 단계까지 하고 reboot
을 했다면, 네트워크를 날려먹었기에 서버실로 내려가서 콘솔을 봐야한다...
cd /etc/sysconfig/network-scripts
나는 귀찮으니, ifcfg-ens192
를 ifcfg-eth0
으로 변경하고, 안에 파일만 살짝 고치겠다.
sudo cp ifcfg-ens192 ifcfg-eth0
이후 편집을 살짝 해서
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=eui64
NAME=ens192
UUID=2513e5d6-5162-4137-8c1c-5a10f6e3c723
DEVICE=ens192
ONBOOT=yes
여기서 ens192
를 eth0
으로 바꿔주자: :%s/ens192/eth0/g
.
반면 eth1
의 경우 나는 고정 IP를 받을 예정이다. 이를 위해서는 다음과 같이 새로 스크립트를 만들어주자.
TYPE=Ethernet
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=10.0.20.10
PREFIX=24
GATEWAY=10.0.20.1
이후 ifcfg-eth1
으로 저장.
이제 대망의 REBOOT 시간이다! 이것 까지 다 끝나고 리부팅을 해야 네트워크가 안날라간다...
결과
[isu@openstack-master ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.113 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe64:9965 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:64:99:65 txqueuelen 1000 (Ethernet)
RX packets 66 bytes 8822 (8.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 66 bytes 8337 (8.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.20.10 netmask 255.255.255.0 broadcast 10.0.20.255
inet6 fe80::20c:29ff:fe64:996f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:64:99:6f txqueuelen 1000 (Ethernet)
RX packets 13 bytes 1470 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11 bytes 806 (806.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
이처럼 인터페이스 이름이 eth0
, eth1
로 변경이 되었고, 각자 IP가 할당된 것을 확인할 수 있다.
'Knowledge > Linux' 카테고리의 다른 글
[Network] 간단한 가상 라우터 만들기 (OVS, NAT) (0) | 2024.05.29 |
---|---|
[Nvidia] nvidia-docker로 localGPT 돌리기 (3) | 2024.01.09 |
[DNS] Public DNS 서버 구축 (0) | 2023.06.09 |
[Bind9] Private DNS 서버 + OpenVPN (0) | 2023.06.02 |