Ваши правила DNAT должны быть немного более конкретными для работы правильно. Один способ продолжиться состоит в том, чтобы добавить a --destination
(или -d
) условие каждому из них, например.
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT \
--to-destination 192.168.1.254
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 22 -j DNAT \
--to-destination 192.168.1.254
где $EXT_IP
Ваш внешний маршрутизатор (глобально routable) IP-адрес.
Протест: Если внутренние клиенты попытаются соединиться с www или ssh сервисами на 192.168.1.254 через внешнее (глобально routable) IP-адрес, то их попытки подключения перестанут работать (в то время как соединения непосредственно с 192.168.1.254 успешно выполнились бы).
Для решения этого, лучше говорить внутренним клиентам получать доступ к серверу через его внутренний IP-адрес. С другой стороны, можно настроить "шпильку NAT" путем добавления пары большего количества правил iptables, следующим образом:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.254 -p tcp \
--dport 80 -j SNAT --to-source $INT_IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.254 -p tcp \
--dport 22 -j SNAT --to-source $INT_IP
где $INT_IP
внутренний IP-адрес маршрутизатора (например, 192.168.1.1). С этими правилами соединения от внутренних клиентов к внешнему IP-адресу будут течь через маршрутизатор. Лучше стараться не делать шпильку NAT, когда это возможно, так как это - довольно неэффективное использование ресурсов системы маршрутизатора и сетевой системы.
Просто чтобы добавить ... для целей SMTP, вам строго не нужна запись A на вершине , если у вас нет записи MX . Большинство агентов почтового транспорта (MTA) по умолчанию сначала ищут запись MX, а если она не найдена, ищут запись A и пытаются доставить туда, куда указывает эта запись. Я не призываю вас делать это, поэтому обязательно используйте запись MX для почты, но просто знайте, что существует такое резервное поведение.
nslookup
не работает, потому что по умолчанию он запрашивает запись A.
~/bin/vmware@precious% nslookup -query=mx umich.edu
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
umich.edu mail exchanger = 0 mx2.umich.edu.
umich.edu mail exchanger = 0 mx3.umich.edu.
[ ... ]
попробуйте вместо этого использовать dig
, его ответ по умолчанию более подробный.