민트 리눅스에서 OpenvSwitch 설정하기

민트 리눅스(Mint Linux) 21.03 을 쓰고 있는데, 네트워킹이 NetworkManager 으로 되어 있다. Ubuntu 22.04 LTS 에서는 networkd 였지만 민트 리눅스는 같은 Ubuntu 라고 하더라도 네트워킹 운영을 NetworkManager 가 담당하고 있다.

이 문서는 민트 리눅스에서 OpenvSwitch 설정에 대한 것이다. Ubuntu 와 다른 네트워킹을 사용하기 때문에 nmcli 명령어를 이용한 방법을 소개 한다.

민트 리눅스 네트워킹 설정

이렇게 NetworkManager 일 경우에는 네트워크 인터페이스 관련 설정을 nmcli 로 하게된다. 물론 민트 리눅스 이기 때문에 GUI 를 통해서 손쉽게 할 수 있다.

GUI 툴을 이용해서 이렇게 설정을 하게 되면, nmcli 명령어를 사용해서 하는 것과 동일하게 nmcli 관련 설정파일이 변경 된다. 다음과 같은 경로에 파일이 존재한다.

]# ls /etc/NetworkManager/system-connections/
'유선 연결 1.nmconnection'
]# cat 유선\ 연결\ 1.nmconnection 
[connection]
id=유선 연결 1
uuid=f2de78ab-770b-3d94-9e17-12345
type=ethernet
autoconnect-priority=-999
interface-name=enp5s0
timestamp=1708005693

[ethernet]
wake-on-lan=64

[ipv4]
address1=192.168.96.4/20,192.168.96.1
dns=192.168.96.7;8.8.8.8;
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[proxy]

GUI 툴을 이용해 설정한 내용이 위 파일에 적용된다.

OpenvSwitch 설치

OpenvSwitch 를 설치를 먼저 해야 한다. Ubuntu 를 사용하고 NetworkManager 일 경우에 OpenvSwitch 도 NetworkManager 와 연관된 패키지를 설치하는 경우가 많지만 민트 리눅스에는 다음과 같은 패키지를 설치 한다.

]# apt install openvswitch-switch
]# systemctl status openvswitch-switch.service
● openvswitch-switch.service - Open vSwitch
     Loaded: loaded (/lib/systemd/system/openvswitch-switch.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2024-02-15 23:34:36 KST; 2min 11s ago
    Process: 5128 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 5128 (code=exited, status=0/SUCCESS)
        CPU: 664us

 2월 15 23:34:36 systemv-desktop systemd[1]: Starting Open vSwitch...
 2월 15 23:34:36 systemv-desktop systemd[1]: Finished Open vSwitch.

systemd 에 설정이 되었고 시작도 되었다. 다음과 같이 명령어가 문제없이 출력되는 확인한다.

]# vs-vsctl show
c9b08240-08fb-438b-a314-123456
    ovs_version: "2.17.8"

위와같이 정상적으로 버전이 출력되어야 한다.

network-manager 패키지 문제

민트 리눅스 21.03 에서는 network-manager 패키지에 문제가 있다. OpenvSwitch 플러그인이 비활성화된 패키지라는 거다. 다음과 같다.

		--disable-modify-system \
		--disable-ovs

ovs 를 활성화하기 위해서는 network-manager 를 재패키징 해야 한다. 이를 위해서는 소스 deb 를 다운로드 받아야 한다.

]# apt source network-manager

이렇게하면 디렉토로에 network-manager 관련 패키징을 위한 파일과 디렉토리가 생성된다. 여기서 다름과 같이 deb 패키징을 위한 configure 파일이라 할 수 있는 rules 파일을 수정해 줘야 한다.

]# cd network-manager-1.36.6/debian
]# vim rules

rules 파일을 열면 configure 설정을 볼 수 있다. 여기서 –disable-ovs 를 삭제한다. 이렇게 되면 ovs 를 위한 설정파일이 생성되고 이 파일에 대한 처리가 없으면 deb 패키징이 실패한다. 설치를 위한 파일 목록은 network-manager.install 파일이다. 여기서 다음을 추가해 준다.

lib/systemd/system/NetworkManager.service.d/NetworkManager-ovs.conf

이제 deb 패키지를 만들어야 하는데, network-manager 의 의존성 라이브러리를 설치해 줘야 한다.

]# apt build-dep network-manager
]# apt install devscripts

그리고 debuild 명령어로 패키징을 제작해야 한다.

]# pwd 
network-manager-1.36.6/debian
]# cd ..
]# devbuild or dpkg-buildpackage -uc -us

위와같이 하면 deb 패키지가 만들어진다. deb 패키지는 network-manager-1.36.6 디렉토리 밖에 만들어 진다.

]# cd ..
]# ls *.deb
network-manager_1.36.6-0ubuntu2_amd64.deb

이제 다음과 같이 재설치를 해준다.

]# dpkg -i network-manager_1.36.6-0ubuntu2_amd64.deb

nmcli 명령어를 이용한 openvswitch 설정

이제 nmcli 명령어를 이용해서 openvswitch 설정을 다음과 같이 한다. IP는 각자 자신의 네트워크 설정으로 바꾸면 된다. 먼저 명령어로 device 상태를 봐본다.

]# nmcli con show
nmcli con show
NAME             UUID                                  TYPE           DEVICE 
유선 연결 1      f2de78ab-770b-3d94-9e17-3c97bf3449c6  ethernet       enp5s0

‘유선 연결 1’ 을 connection name 이라고 하는데, 한글이라 앞으로 설정하는데 문제가 될 수 있다. 이것을 DEVICE와 동일하게 설정해준다. 이것은 앞서 GUI 툴을 이용해서 변경해서 적용하면 간단하게 바꿀 수 있다. 변경이 되면 다음과 같다.

]# nmcli con show
NAME UUID TYPE DEVICE
enp5s0 f2de78ab-770b-3d94-9e17-3c97bf3449c6 ethernet enp5s0

이제 nmcli 명령어를 다음과 같이 입력해준다.

nmcli con add type ovs-bridge conn.interface ovsbr0 con-name ovsbr0
nmcli con add type ovs-port conn.interface ovsbr0 master ovsbr0 con-name ovs-port-ovsbr0
nmcli con add type ovs-interface slave-type ovs-port conn.interface ovsbr0 master ovs-port-ovsbr0 con-name ovs-if-ovsbr0
 
nmcli con add type ovs-port conn.interface ovs-port-enp5s0 master ovsbr0 con-name ovs-port-enp5s0
nmcli con add type ethernet conn.interface enp5s0 master ovs-port-enp5s0 con-name ovs-if-enp5s0
 
nmcli con modify ovs-if-ovsbr0 ipv4.addresses '192.168.96.3/20' ipv4.gateway '192.168.96.1' ipv4.method manual
nmcli con modify ovs-if-ovsbr0 ipv4.dns '192.168.96.7' +ipv4.dns '8.8.8.8'
 
nmcli con down enp5s0
nmcli con up ovs-if-enp5s0
nmcli con up ovs-if-ovsbr0

IP 와 gateway 그리고 DNS 를 자신에 맞게 고쳐준다. 위와 같이하고 ovs-vsctl show 명령어로 제대로 되었는지 확인한다.

]# ovs-vsctl show
c9b08240-08fb-438b-a314-12345
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
        Port ovs-port-enp5s0
            Interface enp5s0
                type: system
    ovs_version: "2.17.8"

그리고 ip a 명령어로 제대로 ip가 세팅되었는지 확인한다.

2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000
    link/ether 9c:6b:00:05:c0:bb brd ff:ff:ff:ff:ff:ff
11: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether fe:f6:1b:cb:ea:74 brd ff:ff:ff:ff:ff:ff
12: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 9c:6b:00:05:c0:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.96.3/20 brd 192.168.111.255 scope global noprefixroute ovsbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::5b4e:4a7e:c5d1:44bf/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

잘되어 보인다. 이제 nmcli 명령어를 이용해 enp5s0 connection 을 삭제한다.

]# nmcli con delete enp5s0 

최종적인 모습은 다음과 같다.

]# nmcli c show
NAME             UUID                                  TYPE           DEVICE          
ovs-if-ovsbr0    1ee631aa-9b4b-45b8-83d5-ddeb3bc25c14  ovs-interface  ovsbr0          
ovs-if-enp5s0    16d7e3ec-fce9-48d2-af78-7e407176fec8  ethernet       enp5s0          
ovs-port-enp5s0  2b8a51b1-65db-4acf-a3c2-23ef69130422  ovs-port       ovs-port-enp5s0 
ovs-port-ovsbr0  253512b9-971f-47b0-97a7-c2221c87b179  ovs-port       ovsbr0          
ovsbr0           86fe3021-cff9-41fb-a21e-92126f8afdf4  ovs-bridge     ovsbr0

이제 재부팅을 한 후에 네트워크가 잘된다면 끝난다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다