라우터 포트 포워딩 시 수신 메일 설정 방법

작동하던 테스트 환경을 DigitalOcean에서 가정용 Linux 머신(Ubuntu)으로 옮겼는데, 수신 메일 설정을 제대로 작동시키는 데 어려움을 겪고 있습니다. 라우터에서 25번 포트를 포워딩했으며, 메일 로그를 확인하면 메일이 도착하는 것을 볼 수 있습니다(로그에서 To:와 From:를 확인할 수 있습니다). 문제는 메일 수신기가 메일을 Discourse에 POST할 때 발생하며, 이때 타임아웃이 발생합니다. ISP가 라우터를 통한 루프백을 허용하지 않아, POST 명령에서 Discourse 인스턴스의 공개 도메인 이름을 사용하면 라우터가 패킷을 드롭하기 때문에 응답이 전혀 없어 멈추게 된다고 의심하고 있습니다.

이로 인해 해당 머신에서 Discourse 웹사이트를 볼 수도 없었습니다… 공개 도메인 이름을 내부 네트워크 IP 주소로 가리키는 줄을 /etc/hosts 파일에 추가하면 된다는 것을 깨달은 이후로는 Firefox에서 Discourse 인스턴스를 볼 수 있게 되었습니다.

메일 수신기 컨테이너가 유사한 작업을 수행하도록 어떤 마법을 부릴 수 있을 것 같습니다. 여기저기 읽어본 결과, /etc/hosts 파일을 사용하지 않는 것 같고, 이것이 문제의 원인이 될 수 있습니다. mail-receiver.yml 파일에 extra_hosts:를 허용하는 줄을 추가해 보았지만, 등록되지 않는 것 같습니다. mail-receiver 앱에 들어가서 /etc/hosts에 다른 줄을 추가하려고 시도해 보면(cat >> 사용), 줄이 나타나는 것을 볼 수 있지만 여전히 같은 문제가 발생합니다.

다음은 로그에서 POST 실패를 보여주는 줄입니다(참고: 이 예제에서 도메인은 임의로 설정한 것입니다):

<23>Feb 23 01:00:31 receive-mail[133]: Recipient: abc@example-discourse.org.uk<19>Feb 23 01:01:31 receive-mail[133]: Failed to POST the e-mail to https://example-discourse.org.uk/admin/email/handle_mail: execution expired (Net::OpenTimeout)<19>Feb 23 01:01:31 receive-mail[133]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize’

어떤 생각이 있으신가요?

다시 시도해 보고 나서야 /etc/hosts 파일에 IP 주소/호스트명을 반대로 입력했음을 깨달았습니다. 이제 작동하는 것 같습니다. 하지만 메일 수신기 컨테이너를 재시작하면 컨테이너의 /etc/hosts 파일에 추가한 추가 줄이 사라집니다. mail-receiver.yml 파일에서 이 추가 줄을 자동으로 추가할 수 있는 방법이 있을까요?

파일을 수정하는 다른 템플릿을 참고해 볼 수 있습니다. 예를 들어 웹 템플릿이 그렇게 합니다.