
다음과 같은 시나리오가 있습니다.
- Postfix 서버 M(메일 저장)
- Postfix Server A(인터넷 연결 IA를 사용하여 메일 릴레이)
- Postfix Server B(인터넷 연결 IB를 사용하여 메일 릴레이)
- 내부 DNS 서버(로컬 이름 확인 수행)
서버 M, A, B는 동일한 네트워크 LAN에 있습니다. 즉, IA와 IB의 인터넷 연결이 끊어지더라도 M&A와 M&B 간의 통신이 반드시 끊어지는 것은 아니므로 Postfix의 smtp_fallback_relay 옵션을 사용할 수 없습니다. 이를 위해.
이제 중계 시 인터넷 연결이 가능한 서버에만 제출하려면 서버 M이 필요합니다.
어떻게 하면 이 일을 가장 잘 할 수 있을까요?
우리가 시도한 것
내 동료와 나는 두 가지 대안을 공유했습니다(완전하지는 않음).
- 메일 저장소(M)의 인식에 따라 "LAN"에서 릴레이 메일을 오프라인으로 가져와 대체 릴레이로 폴백하는 스크립트를 만듭니다.
- 인터넷이 있는 서버 메일 릴레이 A 또는 B를 가리키도록 mail-relay.ourdomain.com을 변경하는 DNS 서버(D) {또는 M의 등 호스트, 더 좋지만 M의 필수 DNS}에 스크립트를 만듭니다. 충분히 작은 TTL(예: 5초)로 액세스
이 두 옵션 모두 대부분 작동합니다. 제가 필요한 것은 왜 작동하지 않는지입니다(둘 중 하나를 사용하면 어떤 위험이 있습니까?).
답변1
두 접근 방식의 문제는 다음과 같습니다.경주 조건즉, 인터넷이 작동 중이었습니다. A 또는 B는 성공적으로 전달되었음을 확인했지만 A 또는 B가 이를 인터넷에 전달하려고 할 때 연결이 끊어졌습니다.
위의 시나리오는 postfix에서 이메일이 흐르는 방식 때문에 가능했습니다.
Email from client ---> Received ---> Queued -> Sent
서버 A의 Postfix는 이메일이 대기열에 있을 때 A가 이메일을 수락했다는 확인 메시지를 M에게 보냅니다. 따라서 postfix가 인터넷에 이메일을 보내려고 할 때 연결이 끊어지고 연결이 다시 돌아올 때까지 이메일이 대기 상태가 될 수 있습니다.
참고: 이 동작은 일반적인 MTA에서 예상된 것입니다. SMTP는저장 및 전달규약.