민트 리눅스에서 OpenvSwitch 설정하기
민트 리눅스(Mint Linux) 21.03 을 쓰고 있는데, 네트워킹이 NetworkManager 으로 되어 있다. Ubuntu 22.04 LTS 에서는 networkd 였지만 민트 리눅스는 같은 Ubuntu 라고 하더라도 네트워킹 운영을 NetworkManager 가 담당하고 있다.
이 문서는 민트 리눅스에서 OpenvSwitch 설정에 대한 것이다. Ubuntu 와 다른 네트워킹을 사용하기 때문에 nmcli 명령어를 이용한 방법을 소개 한다.
민트 리눅스 네트워킹 설정
이렇게 NetworkManager 일 경우에는 네트워크 인터페이스 관련 설정을 nmcli 로 하게된다. 물론 민트 리눅스 이기 때문에 GUI 를 통해서 손쉽게 할 수 있다.
GUI 툴을 이용해서 이렇게 설정을 하게 되면, nmcli 명령어를 사용해서 하는 것과 동일하게 nmcli 관련 설정파일이 변경 된다. 다음과 같은 경로에 파일이 존재한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
]# 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 와 연관된 패키지를 설치하는 경우가 많지만 민트 리눅스에는 다음과 같은 패키지를 설치 한다.
1 2 3 4 5 6 7 8 9 10 11 |
]# 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 에 설정이 되었고 시작도 되었다. 다음과 같이 명령어가 문제없이 출력되는 확인한다.
1 2 3 |
]# vs-vsctl show c9b08240-08fb-438b-a314-123456 ovs_version: "2.17.8" |
위와같이 정상적으로 버전이 출력되어야 한다.
network-manager 패키지 문제
민트 리눅스 21.03 에서는 network-manager 패키지에 문제가 있다. OpenvSwitch 플러그인이 비활성화된 패키지라는 거다. 다음과 같다.
1 2 |
--disable-modify-system \ --disable-ovs |
ovs 를 활성화하기 위해서는 network-manager 를 재패키징 해야 한다. 이를 위해서는 소스 deb 를 다운로드 받아야 한다.
1 |
]# apt source network-manager |
이렇게하면 디렉토로에 network-manager 관련 패키징을 위한 파일과 디렉토리가 생성된다. 여기서 다름과 같이 deb 패키징을 위한 configure 파일이라 할 수 있는 rules 파일을 수정해 줘야 한다.
1 2 |
]# 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 의 의존성 라이브러리를 설치해 줘야 한다.
1 2 |
]# apt build-dep network-manager ]# apt install devscripts |
그리고 debuild 명령어로 패키징을 제작해야 한다.
1 2 3 4 |
]# pwd network-manager-1.36.6/debian ]# cd .. ]# devbuild |
위와같이 하면 deb 패키지가 만들어진다. deb 패키지는 network-manager-1.36.6 디렉토리 밖에 만들어 진다.
1 2 3 |
]# cd .. ]# ls *.deb network-manager_1.36.6-0ubuntu2_amd64.deb |
이제 다음과 같이 재설치를 해준다.
1 |
]# dpkg -i network-manager_1.36.6-0ubuntu2_amd64.deb |
nmcli 명령어를 이용한 openvswitch 설정
이제 nmcli 명령어를 이용해서 openvswitch 설정을 다음과 같이 한다. IP는 각자 자신의 네트워크 설정으로 바꾸면 된다. 먼저 명령어로 device 상태를 봐본다.
1 2 3 4 |
]# nmcli con show nmcli con show NAME UUID TYPE DEVICE 유선 연결 1 f2de78ab-770b-3d94-9e17-3c97bf3449c6 ethernet enp5s0 |
‘유선 연결 1’ 을 connection name 이라고 하는데, 한글이라 앞으로 설정하는데 문제가 될 수 있다. 이것을 DEVICE와 동일하게 설정해준다. 이것은 앞서 GUI 툴을 이용해서 변경해서 적용하면 간단하게 바꿀 수 있다. 변경이 되면 다음과 같다.
1 |
]# nmcli con show<br>NAME UUID TYPE DEVICE <br>enp5s0 f2de78ab-770b-3d94-9e17-3c97bf3449c6 ethernet enp5s0 |
이제 nmcli 명령어를 다음과 같이 입력해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 명령어로 제대로 되었는지 확인한다.
1 2 3 4 5 6 7 8 9 10 |
]# 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가 세팅되었는지 확인한다.
1 2 3 4 5 6 7 8 9 10 |
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 을 삭제한다.
1 |
]# nmcli con delete enp5s0 |
최종적인 모습은 다음과 같다.
1 2 3 4 5 6 7 |
]# 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 |
이제 재부팅을 한 후에 네트워크가 잘된다면 끝난다.