고급 NAT - NAT와 PAT 혼합

고급 NAT - NAT와 PAT 혼합

방금 NAT/PAT를 사용하여 Ubuntu 서버를 라우터로 구성했으며 다음 작업을 수행하려고 합니다.

저는 네트워크를 라우터로 연결된 더 작은 네트워크로 나누는 학교에서 근무합니다. 모든 트래픽을 외부 IP 주소로 전달하는 한 방의 내부 네트워크에 표시되는 IP 주소를 만들어야 합니다.

설명하자면 다음과 같은 구성입니다.

외부 NAT: eth1 - 192.168.1.254/24

내부 NAT: br0 - 192.168.2.10, 매스커레이딩 활성화

br0에 대해서도 192.168.2.1과 같은 주소를 생성해야 합니다. 이 주소는 모든 트래픽을 IP 192.168.1.1로 전달하고 해당 IP가 네트워크에 직접 연결되어 있지만 매스커레이딩이 활성화되지 않은 것처럼 나타납니다. .

기본 아이디어는 라우터 주소 br0을 192.168.2.10으로 설정하고 br0도 위장하지 않는 다른 주소를 갖고 모든 트래픽을 기본 라우터의 주소인 192.168.1.1로 전달하는 것입니다. 그 이유는 br0이 대상 NAT IP 주소(192.168.1.1)와 동일한 주소를 사용하여 라우터 뒤에서 액세스되는 VPN과 물리적 네트워크 사이의 브리지이기 때문입니다. 클라이언트가 항상 "route add" 명령을 실행할 수 있다고 확신할 수 없으므로 이를 우회할 수 있는 방법이 필요합니다.

br0에 대한 보조 IP 주소를 구성하는 방법을 알아냈고 br0:1을 192.168.2.1로 구성했지만 여기에 대한 모든 트래픽을 192.168.1.1로 전달할 수 없는 것 같습니다.

귀하의 도움에 미리 감사드립니다.

답변1

내가 당신을 올바르게 이해하고 있다면 당신이하려는 일은 사실상 일부 NAT가 관련된 정책 라우팅의 한 형태입니다. 해당 서브넷에 있는 특정 라우팅된 서브넷 외부의 일부 호스트에 대한 별칭을 생성하려는 것 같습니다.

해당 SNAT(또는 가장) 없이 DNAT 규칙을 생성할 수 있습니다. 이것이 수행되지 않는 이유는 단지 대부분의 NAT가 NAT의 "내부"에 있는 주소가 "외부"에서 라우팅될 수 없는 연결 문제를 해결하도록 설계되었기 때문입니다. 실제로 호스트 192.168.1.1에 192.168.2.0/24 또는 무엇이든으로 돌아가는 경로가 있는 경우, 기억해 보면 실제로 DNAT 규칙을 설정할 수 있습니다.

iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d 192.168.2.1 -j DNAT --to 192.168.1.1

이제 잠시 멈추고 아직은 그렇게 하지 마세요.

이는 192.168.2.1이 대상 주소일 때 작동합니다(그리고 트래픽에 응답하는 주소가 원래 대상과 다른 이상한 특징을 만듭니다). 나는 그것이 당신이 원하는 일이라고 생각하지 않습니다. 당신의 설명에 따르면 솔직히 잘 모르겠습니다. 192.168.2.1 호스트가 대상이 아닌 라우터 역할을 해야 한다면 DNAT를 수행하는 것은 전혀 도움이 되지 않습니다. 라우터 역할을 해야 한다면 NAT(또는 PAT)는 전혀 도움이 되지 않습니다.

내가 당신의 말을 올바르게 읽고 빈칸을 있는 그대로 채우면 이 서브넷 192.168.2.0/24에 브리지되는 VPN 트래픽이 들어오는 것처럼 들리며, 이 트래픽은 더 넓은 세상이나 일부 하위 집합으로 나가야 합니다. 이 게이트웨이 192.168.1.1을 통해 연결됩니다. 그럴 경우 할 일은 다음과 같다.라우터에 192.168.2.1/24(VPN 클라이언트의 기본 게이트웨이로 설정했다고 가정)를 할당하기만 하면 됩니다., 전달이 활성화되어 있는지 확인하면 됩니다. VPN 클라이언트는 원래 기본 비 VPN 게이트웨이(홈 게이트웨이?)처럼 다음 홉이 192.168.1.1인지 걱정할 필요가 없습니다. 그들은 패킷이 전송될 때 그것을 전혀 인식하지 못합니다. ISP는 우연히 부족한 라우팅 가능한 주소의 낭비를 피하기 위해 항상 RFC1918 주소와 함께 이러한 종류의 체계를 사용합니다. 경로에 있는 모든 라우터가 고유한 주소를 가질 필요는 없습니다. 하지만 고유한 주소가 있으면 문제 해결이 훨씬 쉬워집니다. 여기서 중요한 점은 TCP 연결의 끝점은 다음 홉의 IP 주소 외에는 아무것도 알 필요가 없다는 것입니다.

이미 이 작업을 수행하고 있는데 문제가 있는 경우 반환 경로를 확인하세요. NAT 외부로 트래픽을 보낼 때 192.168.1.1의 게이트웨이가 해당 주소에 대해 NAT를 수행하지 않거나(여전히 192.168.2.0/24로 표시됨) 방화벽을 설정하고 있거나 적절한 경로가 없을 가능성이 있습니다. 192.168.2.0/24로.

제가 두 가지 면에서 귀하의 의도를 오해했다면, 도움이 될 수 있는 세 번째 방법이 있습니다. iptables에서 게이트웨이를 지정할 수 있는 유일한 방법은 TEE 대상을 사용하는 것입니다. TEE 대상은 패킷을 복제하고 복제물을 변경되지 않은 채 임의의 호스트로 라우팅합니다. 하지만 복제되지 않은 패킷을 어떻게든 처리해야 합니다. 해당 대상은 맹글 PREROUTING 체인에 추가될 수 있습니다.

iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -j TEE --gateway 192.168.1.1

그것은 이상한 일입니다. 이는 트래픽을 라우팅하는 것이 아니라 로깅을 위해 설계되었습니다. 내 생각에 iptables의 나중 단계에서 원본 패킷을 폐기할 수 있을 것입니다. 하지만 이것은 단지 혼란스럽고 권장하지 않습니다.

무작위로 명령을 사용하여 인터페이스에 추가 IP 주소를 추가할 수 있습니다 ip addr add. net-tools(ifconfig)를 사용하지 마십시오. 그것은 오래되었고 많은 기능이 빠져 있으며 장기적으로 골칫거리만 줄 것입니다.

관련 정보