IPv6주소는 요즘 많이 사용되고 있는 기능 중 하나이지만 일반 서버 구성에서는 잘 사용되지 않습니다. 이번 글에서는 IPv6를 어떻게 비활성화하는지 살펴봅니다.
환경
Redhat Enterpries Linux 7 ~ 9
레드햇 리눅스는 기본적으로 ipv6가 활성화되어 있습니다. ipv4 셋팅만 했는데 자연스럽게 ipv6가 함께 올라오는 모습을 볼 수 있습니다.
# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.155.88 netmask 255.255.255.0 broadcast 192.168.155.255
inet6 fe80::b661:fa4d:be49:2f15 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:7e:33:4f txqueuelen 1000 (Ethernet)
RX packets 546994 bytes 335415486 (319.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 159504 bytes 11873920 (11.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
...
위 출력 결과에서 inet로 시작하는 라인이 ipv4 주소이고, inet6로 시작하는 부분이 ipv6 주소입니다.
IPv6를 비활성화 하는 방법은 다음과 같이 3가지 방법이 있습니다.
- NetworkManager를 통한 방법 (단일 인터페이스에 개별적으로 적용)
- sysctl 을 통한 방법 (파라미터를 이용 전체 인터페이스에 한 번에 적용 가능)
- 부팅 커널 파라미터를 통한 방법 (권장 안 함)
가장 간단하게 할 수 있는 방법은 첫 번째 방법인 NetworkManger를 통한 방법입니다. 또한 RHEL8 버전부터는 NetworkManager를 끌 수 없어 모두 사용 중 일 것이므로 첫 번째 방법으로 진행하면 간편합니다. 전체 인터페이스를 비활성화하고 싶다면 커널 파라미터를 이용하는 방법이 편리합니다. 아래서 NetworkManger 방법과 sysctl을 통한 두 가지 방법을 살펴보겠습니다.
1) NetworkManager 를 이용한 IPv6 비활성화
NetworkManager를 이용한 방법이므로 RHE7 환경에 NetworkManager를 사용하지 않는 서버의 경우는 아래 2번 방법을 적용합니다.
- 대상 확인
아래의 bond0 장치에 inet6(ipv6)가 올라와 있는데 해당 장치를 비활성화할 예정입니다.
# ifconfig bond0
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.155.88 netmask 255.255.255.0 broadcast 192.168.155.255
inet6 fe80::b661:fa4d:be49:2f15 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:7e:33:4f txqueuelen 1000 (Ethernet)
RX packets 546994 bytes 335415486 (319.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 159504 bytes 11873920 (11.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 비활성화
비활성화 방법은 OS 버전에 따라 명령어가 조금 다릅니다. 버전에 맞는 명령어를 선택해서 사용하면 됩니다.
<RHEL7 ~ RHEL8.0>
# nmcli connection modify bond0 ipv6.method "ignore"
# nmcli connection up bond0
<RHEL8.1 ~ RHEL9>
# nmcli connection modify bond0 ipv6.method "disabled"
# nmcli connection up bond0
- 확인
# ifconfig bond0
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.155.88 netmask 255.255.255.0 broadcast 192.168.155.255
ether 52:54:00:7e:33:4f txqueuelen 1000 (Ethernet)
RX packets 548256 bytes 335489716 (319.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 159748 bytes 11899990 (11.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
출력 결과에서 inet6 라인이 사라진 부분을 확인할 수 있으며, 이 방법은 재부팅 해도 유지됩니다.
2) sysctl 파라미터를 이용한 IPv6 비활성화 (전체 인터페이스)
- 설정
/etc/sysctl.conf 파일에 파라미터를 적용합니다. localhost의 ipv6 비활성화는 권장되지 않기 때문에 2가지 파라미터를 같이 설정합니다.
- 첫 번째 줄은 전체 ipv6를 비활성화하는 옵션
- 두 번째 줄은 localhost 인터페이스는 ipv6를 활성화하는 옵션
# vim /etc/sysctl.conf
...
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 0
1: 비활성화
0: 활성화
- 적용
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 0
- 확인
# ifconfig bond0; ifconfig lo
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.155.88 netmask 255.255.255.0 broadcast 192.168.155.255
ether 52:54:00:7e:33:4f txqueuelen 1000 (Ethernet)
RX packets 2205 bytes 170966 (166.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 909 bytes 141988 (138.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
참조
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/using-networkmanager-to-disable-ipv6-for-a-specific-connection_configuring-and-managing-networking