У меня два сервера работают в одной сети.
Внешний IP-адрес основного сервера: 1.2.3.4 (domain.com)
Внешний IP-адрес вторичного сервера: не должен быть доступен напрямую извне
Главный сервер (dns, mx, www) внутренний адрес 10.10.10.10 Вторичный сервер (www) - внутренний адрес 10.10.10.20 10.10.10.10 также является маршрутом по умолчанию для 10.10.10.20
Задание:
(10.10.10.20)# dig @1.2.3.4 domain.com mx
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
(10.10.10.20)# dig @10.10.10.10 domain.com
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7_1.1 <<>> @10.10.10.10 domain.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36417
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;domain.com. IN A
;; ANSWER SECTION:
domain.com. 256 IN A 1.2.3.4
Тот же запрос, запущенный с 10.10.10.10, работает нормально
Здесь происходит то, что сервер с локального IP-адреса (10.10.10.20) пытается связаться с другим сервером по его внешнему IP-адресу (1.2.3.4 или 10.10.10.10).
Я не понимаю, как мне справиться с этим с помощью iptables, если я хочу получить доступ к внешним службам основного сервера со вторичного сервера.
Заранее спасибо.
Решение, которое я придумал до сих пор:
iptables -t nat -A PREROUTING -p tcp -s 10.10.10.20 -d 1.2.3.4 --dport 53 -j DNAT --to-destination 10.10.10.10:53
iptables -t nat -A PREROUTING -p tcp -s 10.10.10.20 -d 1.2.3.4 --dport 53 -j DNAT --to-destination 10.10.10.10:53
те же правила применяются к другим услугам, если таковые имеются.
Пока я не встретил никаких подводных камней, и это работает, поэтому пока я отмечу это как правильный ответ.