앞의 포스트에서 두 대의 PC로 구성된 Proxmox 클러스터에 SDN 기능을 사용하여 VXLAN을 구성하였다.
앞의 포스트에서 L2 레이어로 구성된 VXLAN은 172.16.1.0/24 네트워크를 사용한다. 하지만 문제가 있다. 172.16.1.0/24 네트워크에 생성하는 가상 서버(VM)들은 인터넷에 접속하지 못할 뿐만 아니라 192.168.219.0/24의 Proxmox 호스트는 물론 홈 네트워크의 시놀로지 NAS 등에도 접속하지 못한다.
이유는 172.16.1.0/24 네트워크와 192.168.219.0/24의 두 네트워크 사이에서 패킷을 라우팅 해줄 게이트웨이(라디오:Router)가 없기 때문이다.
이 문제를 해결하기 위해서는 다음 그림에서 처럼 라우팅과 접근통제를 할 수 있도록 Firewall(방화벽) 가상머신을 설치하여 두 네트워크를 연결해주는 것이다.
방화벽을 통해 VXLAN을 인터넷에 연결하기
L3 라우터 역할과 접근통제를 수행할 방화벽을 생성하여 VXLAN을 홈 네트워크를 통해 인터넷에 연결하면 다음과 같은 구성이 완성된다.

현재 기존의 쿠버네티스를 테스트 하던 환경을 모두 삭제하고 VXLAN 네트워크에 다시 구성하기 위해 K8s 노드 3개를 설치할 가상머신 3대를 VXLAN 네트워크인 172.16.1.0/24 IP대역에 설치했다. 이 3개의 노드를 홈 네트워크인 192.168.219.0/24와 통신이 가능하도록 firewall을 설치했다.
firewall 은 두 개의 인터페이스를 갖는다. 하나는 홈 네트워크와 연결되는 192.168.219.254를 할당하고 하나는 SDN 네트워크(VXLAN)의 172.16.1.254를 할당하고 두 네트워크 간 패킷을 라우팅하도록 구성했다.
이렇게 하면 K8s 3개의 가상머신에서 192.168.219.0/24의 홈 네트워크에 있는 MySQL-CT와도 통신이 가능하고 apt update 명령을 통해 업데이트도 잘 된다. 당연히 홈 네트워크에 있는 PC에서 172.16.2.0/24에 있는 가상머신으로 SSH 접속도 가능하다. (단, PC의 라우팅 테이블에 라우팅 정보를 추가해줘야 하는 불편함은 있다. (홈 네트워크의 공유기(HGWD-1G)에 라우팅 테이블을 수정할 수 있는 기능이 있다면 좋았을텐데~)
방화벽 구성을 위한 인터페이스 추가
방화벽(firewall)은 리눅스 컨테이너(LXC)로 생성했다. 그리고 다음과 같이 두 인터페이스를 추가해주었다.

172.16.1.254/24 인터페이스는 172.16.1.254.0/24 대역의 IP를 갖도록 생성된 가상머신이 상위 네트워크인 192.168.219.0/24와 인터넷으로 나갈 때 통과하는 게이트웨이 역할을 한다.
그리고 반대로 192.168.219.254/24 인터페이스는 홈 네트워 IP 대역의 가상머신이나 장비가 SDN 네트워크인 172.16.1.0/24로 가고자할 때 게이트웨이 역할을 수행하게 된다.
firewall 리눅스 컨테이너에 접속해서 IP 정보를 확인하면 다음과 같이 보인다.

방화벽 정책 및 라우팅 정책
firewall은 Ubuntu 24.04 LTS 버전으로 구성했다. 라우팅과 접근통제를 위해 iptable이 아닌 nftable을 사용해 구성했다. iptable 보다 nftable이 정책 적용이 쉽다고 해서 선택했다.
그리고 /etc/nftables.conf 파일에 다음과 같이 정책을 추가했다.
root@firewall:/etc# cat nftables.conf
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif "lo" accept
iifname "eth0" tcp dport 22 ct state new accept
icmp type echo-request accept
icmp type echo-reply accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state established,related accept
iifname "eth1" oifname "eth0" accept
iifname "eth0" oifname "eth1" tcp dport 22 ct state new accept
ip protocol icmp accept
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "eth0" ip saddr 172.16.1.0/24 masquerade
}
}
#proxmox #vxlan
답글 남기기