그래서 방화벽과 리눅스 네트워킹 전반을 이해하는 과제가 주어졌습니다. 이것은 내 테스트 설정입니다.
라우터와 클라이언트는 Debian 12를 실행 중이고 노트북은 Ubuntu 22.04를 실행 중입니다.
이 설정은 다음 목표를 달성해야 합니다.
- 라우터는 분명히 서브넷 192.168.8.0/24와 192.168.7.0/24 사이에서 라우터 역할을 해야 합니다.
- 노트북과 클라이언트는 서로 핑을 보낼 수 있어야 합니다.
- 소스 IP가 192.168.7.120인 경우 클라이언트의 트래픽은 192.168.8.120을 통해 지정되어야 합니다.
- 소스 IP가 192.168.7.121인 경우 클라이언트의 트래픽은 192.168.8.121을 통해 NAT되어야 합니다.
- 방화벽 표준 기능을 갖춘 라우터의 방화벽, 직접적인 규칙 없음
내 문제는 5를 구현하는 것입니다. 무엇을 시도하더라도 트래픽은 항상 192.168.8.120을 통해 NAT됩니다.
방화벽 구성은 다음과 같습니다.
firewall-cmd --permanent --new-zone=ext0
firewall-cmd --permanent --zone=ext0 --set-target=default
firewall-cmd --permanent --zone=ext0 --add-masquerade
firewall-cmd --permanent --zone=ext0 --add-forward
firewall-cmd --permanent --zone=ext0 --add-service=ssh
firewall-cmd --permanent --zone=ext0 --change-interface=enp1s0:0
firewall-cmd --permanent --zone=ext0 --add-source=192.168.7.120
firewall-cmd --permanent --zone=ext0 --add-source=192.168.8.100/32
firewall-cmd --permanent --new-zone=ext1
firewall-cmd --permanent --zone=ext1 --set-target=default
firewall-cmd --permanent --zone=ext1 --add-masquerade
firewall-cmd --permanent --zone=ext1 --add-forward
firewall-cmd --permanent --zone=ext1 --add-service=ssh
firewall-cmd --permanent --zone=ext1 --change-interface=enp1s0:1
firewall-cmd --permanent --zone=ext1 --add-source=192.168.7.121
firewall-cmd --permanent --zone=ext1 --add-source=192.168.8.0/24
저는 다양한 장치 유형을 시도했기 때문에 인터페이스 이름이 약간만 다른 다양한 구성을 사용했습니다.
- 가상 인터페이스, 여기서 볼 수 있는 문제는 enp1s0:0 및 enp1so:1과 같은 두 장치가 동일한 MAC 주소를 공유한다는 것입니다. 새로운 로컬 MAC 주소를 할당하고 각 인터페이스를 브리지로 래핑해 보세요.
- 같은 문제인 VLAN도 MAC을 할당하고 브리지를 우회하려고 시도했습니다.
- 가상 인터페이스는 외부 세계에는 보이지 않으며 브리지로 래핑하는 것은 도움이 되지 않습니다.
기본 아이디어는 두 개의 영역으로, 하나는 192.168.8.120의 트래픽용이고 다른 하나는 192.168.8.121의 트래픽용입니다. 해당 IP가 있는 "발신" 인터페이스를 각 영역에 추가하고 가장 및 전달을 켠 다음 마지막으로 "수신" 인터페이스 또는 IP 주소를 소스로 추가합니다. 인터페이스를 추가하는 것만으로는 충분하지 않으며 IP 소스를 추가할 때만 작동하는 것으로 나타났습니다.
내가 본 또 다른 문제는 동일한 소스를 방화벽의 다른 영역에 추가할 수 없다는 것입니다(소스 192.168.8.100/32 및 192.168.8.0/24 참고). AFAIK IP 소스는 인터페이스보다 우선하며 영역은 알파벳순으로 처리되므로 최소 192.168.8.100의 트래픽(예: 에코 응답)이 영역 ext0에 정체됩니다.
방화벽 문서에 풍부한 규칙은 최후의 수단으로만 사용해야 한다고 명시되어 있으므로 아직 이에 대해 자세히 조사하지 않았습니다(지금은 그렇게 하고 있으므로 어떤 조언이라도 감사하겠습니다).
그럼 내가 뭘 잘못하고 있는 걸까요? Firewalld의 기본 기능으로 이 작업을 수행할 수 있습니까?
도움을 주셔서 미리 감사드립니다 :)