NAT 설정이 때때로 올바르게 작동하는 이유는 무엇입니까?

NAT 설정이 때때로 올바르게 작동하는 이유는 무엇입니까?

숙제...

로컬 네트워크에는 ( 192.168.0.185"클라이언트"), 192.168.0.129("게이트웨이"), 192.168.0.81("서버") 등 3대의 컴퓨터가 있습니다. "서버"는 HTTP 서버를 실행하고 있으므로 192.168.0.81다른 두 컴퓨터 중 하나에서 브라우저의 주소 표시줄에 입력하면 웹 페이지가 표시됩니다.

작업은 소위 "게이트웨이"에 NAT를 설정하여 " 192.168.0.129클라이언트" 브라우저( )에 해당 IP 주소를 입력하면 "서버"에서 제공하는 웹 페이지가 표시되도록 하는 것입니다. 이것은 내 솔루션 시도입니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -p tcp -d 192.168.0.129 --dport 80 -j DNAT --to 192.168.0.81:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

이것은 (나는 희망한다) "서버"(DNAT)에 대한 "게이트웨이" 리디렉션 요청을 만드는 동시에 "서버"가 "게이트웨이"를 통해 응답을 적절하게 보낼 수 있도록 요청의 소스 주소를 자체 주소로 대체합니다. "클라이언트"(SNAT)에게 직접 전송합니다.

"클라이언트 브라우저의 주소 표시줄"에 "게이트웨이의 IP"를 입력했습니다. 오랫동안 살다! 페이지를 봤어요! 나는 끝났다고 생각했다!

그렇지만 난 아니야. 그런 다음 "클라이언트"에서 페이지를 다시 로드합니다. 시간 초과 오류가 발생합니다. 페이지를 다시 로드합니다. 또 시간이 초과되었습니다. 잠시 기다렸다가 다시 로드했습니다. 이 페이지는 올바르게 제공되었습니다. 그래서 마지막으로 다시 로드했는데...시간이 초과되었습니다.

이것은 나를 혼란스럽게 한다. 페이지가 제공되면 잠시 동안 작업이 중단되는 것 같습니다. 왜 이런 일이 발생합니까? 내 실수는 어디에 있습니까?

"클라이언트" 브라우저에 ("게이트웨이 주소"를 입력하는 대신) "서버 주소"를 입력해도 이러한 문제가 발생하지 않는다는 점에 유의해야 합니다.

답변1

드디어 이해가 된 것 같아요. 범인은 다음 줄입니다.

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

다음과 같이 변경하면 작업이 시작되었습니다.

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129

이유는 모르겠지만 NAT가 연결을 식별하기 위해 포트를 사용한다는 막연한 생각이 있습니다. 따라서 포트를 하나만 지정하면 요청이 2개 이상일 때 충돌이 발생합니다.

답변2

나는 라우터로 사용하는 Debian이 설치된 PC를 가지고 있으며 몇 가지 경험을 여러분과 공유할 수 있습니다.

라우팅

의도적으로 호스트를 라우터로 사용하는 경우에는 이 작업을 수행하지 마십시오.

echo 1 > /proc/sys/net/ipv4/ip_forward

대신 다음 중 하나를 수행하십시오.

  • sysctl -w net.ipv4.ip_forward=1
  • nano /etc/sysctl.conf:
    • 그리고 편집하다net.ipv4.ip_forward = 1

앞으로

아, 방금 당신이 제공할 수 있다는 것을 알았습니다.다음 내용모든 것에는 마법이 거의 없습니다. 이것은 프로덕션 답변일 뿐입니다. 이제 내부 구성을 자세히 살펴보는 것은 귀하의 몫입니다(Google천강원iptables- 그러면 파서/생성기가 어떻게 작동하는지 알게 될 것입니다 )

다음으로 몇 가지를 제안해 보겠습니다.인터넷 민감도재생할 수 있는 웹 인터페이스 - 직접 방문192.168.0.81:10000이제 명령줄을 배울 이유가 없습니다. 모든 iptables 작업은 이제 웹 인터페이스를 통해 수행됩니다! ;) 또한 쉘 스크립트를 읽고 이제 프로덕션 환경이 어떻게 작동하는지 알 수 있습니다!

기록

webmin은 모든 작업을 수행하지만 Debian을 사용하고 콘솔 로그를 원하는 경우에는 apt install iftop(google iftopsource, read, education) 만 입력하면 됩니다.


제 시간과 이 정보가 유용했다면 이 게시물을 좋아요하고 수락해 주세요!

관련 정보