
간단히 말해서, 마스터를 통해 트래픽을 라우팅해야 하는 클러스터 시스템이 있습니다. 노드에서 외부 세계로의 트래픽 라우팅은 작동하지만 우리 부서의 서브넷에서 노드로의 트래픽 라우팅은 실패합니다. 안타깝게도 서브넷에 노드를 추가하는 것은 불가능합니다.
설정
클러스터는 일부 주변 장치와 함께 마스터와 여러 노드로 구성됩니다. 노드는 인트라넷이나 인터넷에서 숨겨진 내부 네트워크에 있습니다. NAT는 마스터에 이미 설치되어 있으므로 노드는 내부 및 외부 서버에 액세스할 수 있습니다. 이 부분은 작동합니다.
마스터의 외부 인터페이스는 제어할 수 없는 게이트웨이를 공유하는 워크스테이션 PC와 동일한 서브넷에 있습니다.
편집: 클러스터는 CentOS 7을 실행하고 PC는 Ubuntu xenial 기반 배포판을 실행합니다.
작업
일부 소프트웨어 패키지는 노드에 직접 액세스해야 합니다. 이를 위해 우리는 iptables를 사용하여 마스터에 두 번째 NAT를 설정하고 마스터를 통해 10.10.1.0/24로 트래픽을 보내기 위해 PC에 IP 경로를 추가하려고 했습니다.
구성
마스터: IP 경로
default via 123.45.67.254 dev eth0 proto static metric 100
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.0.1
123.45.67.0/23 dev eth0 proto kernel scope link src 123.45.67.204 metric 100
마스터: iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 7356 packets, 880K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 4884 packets, 687K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3445 packets, 225K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 3445 packets, 225K bytes)
pkts bytes target prot opt in out source destination
439 33324 MASQUERADE all -- * eth0 10.10.1.0/24 0.0.0.0/0
61828 3710K MASQUERADE all -- * eth1 123.45.67.0/23 10.10.1.0/24
MASQUERADE 대신 SNAT를 사용해도 아무런 차이가 없습니다.
노드: IP 경로
default via 10.10.0.1 dev eth1
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.1.1
PC: IP 경로
default via 123.45.67.254 dev eth0 proto static metric 100
10.10.0.0/16 via 123.45.67.204 dev eth0
123.45.67.0/23 dev eth0 proto kernel scope link src 123.45.67.191 metric 100
지금까지의 진단
- node01에서 인터넷/인트라넷/PC로의 NAT가 완벽하게 작동합니다.
- TCP 핸드셰이크 중에 pc1에서 node01로의 NAT가 실패합니다.
- SYN은 마스터를 통해 node01로 전달되고 tcpdump에 SYN_RECV로 표시됩니다.
- SYN+ACK가 node01에서 마스터로 전송됩니다.
- SYN+ACK가 마스터의 tcpdump에 나타나고 필터로 전달됩니다.
- tcpdump는 필터를 통과하는 SYN+ACK를 보여줍니다.
- iptables는 필터 FORWARD, mangle FORWARD + POSTROUTING을 통과하는 SYN+ACK 패키지를 보여줍니다.
- SYN+ACK 패키지는 절대로 nat POSTROUTING을 통과하지 못합니다(그렇습니까?).
- SYN+ACK 패키지가 pc1에 도착하지 않습니다.
- 물론 악수는 실패한다.
- pc1이 SYN_SENT에서 멈췄습니다.
- node01이 SYN_RECV에서 멈췄습니다.
- 결국 연결 시간이 초과되었습니다.
- 게이트웨이에서 패키지를 모니터링할 방법이 없습니다.
내 추측으로는 소스 주소가 마스터에 다시 쓰여지기 때문에 도중에 상태 저장 라우터가 SYN+ACK 패키지를 삭제하여 원래 SYN 패키지와의 관계가 손실된다는 것입니다.
어떻게 작동하게 할 수 있나요?
추가 구성/로그가 필요한 경우 알려주십시오.