У меня проблема с выделенным сервером, я не знаю, используется ли это по умолчанию, но проблема в следующем:
Если я подключаюсь к службе, расположенной на сервере с localhost, служба получает в качестве исходного IP-адреса внешний IP-адрес.
Позвольте мне показать пример, я использую netcat для прослушивания 127.0.0.1:4444
xxxxxx # nc -vv -l -s 127.0.0.1 -p 4444
listening on [127.0.0.1] 4444 ...
Давайте проверим, все ли в порядке:
xxxxxx ~ # netstat -atnp | grep 4444
tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 14038/nc
Хорошо, давайте подключимся:
xxxxxx ~ # nc -vv 127.0.0.1 4444
localhost [127.0.0.1] 4444 (?) open
Вернитесь к tty, у которого есть процесс прослушивания, и я получаю следующее:
connect to [127.0.0.1] from xxxxxx.net [176.31.xxx.xx] 50354
Так вот в чем проблема. У меня есть серверный демон, который должен прослушивать localhost и проверять, что ip равен 127.0.0.1, когда клиент подключается, но по какой-то причине, когда я подключаюсь к localhost, он сообщает внешний ip ...
Если я сделаю то же самое с IPv6, он будет работать как исключение ... Обнаруживает соединение как localhost (:: 1).
Некоторая информация, которая может быть полезна:
"localhost" без проблем разрешается до 127.0.0.1
xxxxxx ~ # ping -c1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.086 ms
Думаю, ничего странного в моем файле hosts нет ...
xxxxxx ~ # grep -v ^# /etc/hosts
127.0.0.1 localhost localhost.localdomain
176.31.xxx.xx xxxxxx.net ns1.xxxxxx.net
::1 ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
И ifconfig сообщает, что все в порядке ...
eth0 Link encap:Ethernet HWaddr e0:69:95:d8:30:a1
inet addr:176.31.xxx.xx Bcast:176.31.108.255 Mask:255.255.255.0
inet6 addr: 2001:41d0:8:xxxx::/64 Scope:Global
inet6 addr: 2001:41d0:8:xxxx:x:xx:xx:xx/64 Scope:Global
inet6 addr: fe80::e269:95ff:fed8:30a1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16916 errors:0 dropped:0 overruns:0 frame:0
TX packets:16914 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8410679 (8.0 MiB) TX bytes:10539881 (10.0 MiB)
Interrupt:28 Base address:0xe000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5570 errors:0 dropped:0 overruns:0 frame:0
TX packets:5570 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:744490 (727.0 KiB) TX bytes:744490 (727.0 KiB)
Решено
Спасибо @Cakemox, который посоветовал мне iptables
. У меня есть следующее правило, которое вызвало неожиданное поведение:
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination xxx.xxx.xxx.xxx:1234
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
Я исправлю это перенаправление должным образом, чтобы избежать проблем в будущем ...