Error: 'Cannot Assign Requested Address' in Exim

Issue

Ketika ingin mengirimkan email ke alamat seperti gmail.com, yahoo.com, atau tujuan lainnya, pesan email tidak berhasil terkirim, dan di log Exim muncul pesan error berikut.

2024-07-31 05:26:38 1sZ1rC-000f4v-1Y <= [email protected] H=(localhost) [127.0.0.1] P=esmtpa A=dovecot_login:[email protected] S=1661 [email protected] T="Pengiriman email gento ke gmail" for [email protected]
2024-07-31 05:26:38 cwd=/var/spool/exim 3 args: /usr/local/apps/exim/bin/exim -Mc 1sZ1rC-000f4v-1Y
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y H=gmail-smtp-in.l.google.com [2404:6800:4003:c0f::1b] Cannot assign requested address
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y H=alt1.gmail-smtp-in.l.google.com [2607:f8b0:400e:c00::1a] Cannot assign requested address
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y H=alt2.gmail-smtp-in.l.google.com [2607:f8b0:4023:c0b::1b] Cannot assign requested address
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y H=alt3.gmail-smtp-in.l.google.com [2607:f8b0:4023:1004::1a] Cannot assign requested address
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y H=alt4.gmail-smtp-in.l.google.com [2607:f8b0:4003:c04::1a] Cannot assign requested address
2024-07-31 05:26:38 1sZ1rC-000f4v-1Y == [email protected] R=lookuphost T=remote_smtp defer (99): Cannot assign requested address
2024-07-31 05:27:59 1sZ1rC-000f4v-1Y H=gmail-smtp-in.l.google.com [142.251.10.26] Cannot assign requested address
2024-07-31 05:27:59 1sZ1rC-000f4v-1Y H=alt1.gmail-smtp-in.l.google.com [2607:f8b0:400e:c00::1b] Cannot assign requested address
2024-07-31 05:27:59 1sZ1rC-000f4v-1Y H=alt2.gmail-smtp-in.l.google.com [2607:f8b0:4023:c0b::1a] Cannot assign requested address
2024-07-31 05:27:59 1sZ1rC-000f4v-1Y == [email protected] R=lookuphost T=remote_smtp defer (99): Cannot assign requested address
2024-07-31 05:40:19 1sZ1rC-000f4v-1Y == [email protected] R=lookuphost T=remote_smtp defer (-54): retry time not reached for any host for 'gmail.com'
2024-07-31 05:41:24 1sZ1rC-000f4v-1Y == [email protected] R=lookuphost T=remote_smtp defer (-54): retry time not reached for any host for 'gmail.com'
2024-07-31 06:11:22 1sZ1rC-000f4v-1Y H=gmail-smtp-in.l.google.com [2404:6800:4003:c1a::1a] Cannot assign requested address
2024-07-31 06:11:22 1sZ1rC-000f4v-1Y H=gmail-smtp-in.l.google.com [74.125.24.26] Cannot assign requested address

Solution

Masalah ini sering terjadi pada VPS atau instance yang menggunakan IP public floating. Langkah pertama yang perlu dilakukan adalah memastikan tidak ada kesalahan pada konfigurasi IP.

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:08:ff:5c brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 192.168.200.247/24 brd 10.80.200.255 scope global dynamic noprefixroute eth0
       valid_lft 73492sec preferred_lft 73492sec

Selanjutnya periksa konfigurasi remote_smtp pada file exim.conf.

remote_smtp:
    driver = smtp
    dkim_domain = ${lc:${domain:$h_from:}}
    dkim_selector = x
    dkim_private_key = /var/webuzo-data/mail/dkim/private/${perl{untaint}{${dkim_domain}}}
    dkim_canon = relaxed
    interface = <; ${if exists {/etc/mailips}{${lookup{$sender_address_domain}lsearch{/etc/mailips}{$value}{}}}{}}
    helo_data = ${if exists {/etc/mailhelo}{${lookup{$sender_address_domain}lsearch{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
    message_linelength_limit = 2048

Pada bagian interface dikonfigurasi agar dapat menentukan alamat IP atau interface yang digunakan untuk mengirimkan email sesuai dengan domain pengirim jika file konfigurasi /etc/mailips tersedia.

Sehingga dari sini kita hanya perlu memastikan domain telah diarahkan ke IP yang benar.

# cat /etc/mailips
example.com: 192.168.200.247
example.online: 192.168.200.247

Anda dapat mengetesnya dengan perintah berikut.

exim -be '${lookup{example.com}lsearch{/etc/mailips}{$value}{}}'

Restart service exim untuk menerapkan perubahan, lalu test kirim email kembali.

systemctl restart exim