방화벽과 NAT

방화벽과 NAT

그래서 방화벽과 리눅스 네트워킹 전반을 이해하는 과제가 주어졌습니다. 이것은 내 테스트 설정입니다.

여기에 이미지 설명을 입력하세요.

라우터와 클라이언트는 Debian 12를 실행 중이고 노트북은 Ubuntu 22.04를 실행 중입니다.

이 설정은 다음 목표를 달성해야 합니다.

  1. 라우터는 분명히 서브넷 192.168.8.0/24와 192.168.7.0/24 사이에서 라우터 역할을 해야 합니다.
  2. 노트북과 클라이언트는 서로 핑을 보낼 수 있어야 합니다.
  3. 소스 IP가 192.168.7.120인 경우 클라이언트의 트래픽은 192.168.8.120을 통해 지정되어야 합니다.
  4. 소스 IP가 192.168.7.121인 경우 클라이언트의 트래픽은 192.168.8.121을 통해 NAT되어야 합니다.
  5. 방화벽 표준 기능을 갖춘 라우터의 방화벽, 직접적인 규칙 없음

내 문제는 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의 기본 기능으로 이 작업을 수행할 수 있습니까?

도움을 주셔서 미리 감사드립니다 :)

관련 정보