перенаправление iptables вне запрашивает к 127.0.0.1

Упрощенный, stdbuf является оберткой вокруг stdio функциональности. Буферизация строки входных потоков не определена в stdio; я не могу найти документ стандартов, в котором говорится, что это означает, таким образом, это буквально бессмысленно насколько стандарты идут.

Принимая поведение, аналогичное stdout буферизации строки, буферизация строки stdin потребовала бы чтения вызова () однажды для каждого символьного чтения, потому что нет никакого другого способа гарантировать, что Вы не читаете мимо новой строки на дескрипторе. Так как точка буферизации должна сократить количество системных вызовов, неудивительно, что stdio библиотека не реализует это.

42
01.04.2015, 02:19
3 ответа

iptables постановляют, что Вы используете, будет работать, но существует одно дополнительное изменение, которое необходимо внести:

sysctl -w net.ipv4.conf.eth0.route_localnet=1

(замена eth0 с nic 192.168.2.2 находится на),

По умолчанию это значение 0, который дает ядру команду не направлять внешний трафик, предназначенный к 127.0.0.0/8. Это только для безопасности трафик, как таковой не обычен.


Дополнительное примечание: Ваше текущее правило iptables слишком широко. Ваше правило указывает -d 192.168.1.0/24 --dport 2222 как целевое соответствие, означая, что, если Ваша машина пытается говорить с другим хостом на порте 2222 (т.е. исходящий трафик), оно будет перенаправлено также. Любой необходимо измениться -d соответствие к -d 192.168.2.2, или добавьте -i eth0 (или независимо от того, что Ваш nic).

62
27.01.2020, 19:35
  • 1
    Эту информацию удивительно трудно найти. –  Wren T. 16.05.2014, 07:06
  • 2
    Да, очень ценная дефицитная информация!Спасибо! Но я не имею route_localnet. Были другие названия его? (в Linux 2.6.30) ls /proc/sys/net/ipv4/conf/lan/: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm передающий mc_forwarding promote_secondaries rp_filter send_redirects отмечают –  imz -- Ivan Zakharyaschev 01.04.2015, 01:39
  • 3
    , для которого я вижу, патч route_localnet более свежо (7 июня 2012), чем мое ядро (2.6.30-std-def-alt15 № 1 SMP понедельник 14 декабря 8:45:48 UTC 2009). Хорошо, я просто достигну требуемого перенаправления портов (снаружи к внутренней части) с процессом переадресации как netcat (nc), xinetd, или опции перенаправления портов ssh (последний неэффективен и глуп, конечно, но я упоминаю это, потому что, ну, в общем, эта возможность там). А-ч –  imz -- Ivan Zakharyaschev 01.04.2015, 01:50
  • 4
    Мои 2 цента: можно включить этот параметр для всех интерфейсов с sysctl -w net.ipv4.conf.all.route_localnet=1 –  Dmitriusan 10.11.2017, 14:39

Можно перенаправить к localhost, но не к обратной петле (127.0.0.0/8). Обратная петля является лазейкой. Необходимо перенаправить к одному из реальных интерфейсов. Попытайтесь использовать ПЕРЕНАПРАВЛЕНИЕ.

iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222

3
27.01.2020, 19:35
  • 1
    Это - вероятно, лучший ответ без sysctl voodo... –  Lester Cheung 03.06.2016, 05:30
  • 2
    Все еще не помогает, если порт 222 только послушают на localhost (то правило не изменит адрес назначения), –  sanmai 20.12.2016, 06:35
  • 3
    В этом случае, использовать -j DNAT --to-destination w.x.y.z:222 –  dresende 21.12.2016, 02:58

Что делать, если правильный ответ с route_localnet не работает? ..

Если ваше ядро ​​не включает патч для route_localnet , то .. . обновить ядро!

Или есть другие способы перенаправить трафик, поступающий на один интерфейс, на другой порт другого интерфейса (в частности, на localhost), запустив процесс, который будет прослушивать внешний интерфейс и пересылать трафик.

netcat ( nc ), xinetd и ssh (и, возможно, другие) - все это примеры программ, которые могут это делать (хотя выбирают ssh было бы странно и неэффективно).

Я написал для этого конфигурацию для xinetd . Теперь эта служба запускается автоматически:

# cat /etc/xinetd.d/z-from-outside 
# default: off
# description: Forward connections to the z port.
service z-from-outside
{
    disable         = no
    socket_type     = stream
    type        = UNLISTED
    wait            = no
    user            = nobody
    bind        = vaio.ob
    port        = 7070
    redirect    = localhost 7070
}
# 

( vaio.ob - имя этого хоста на внешнем сетевом интерфейсе.)

После перезагрузки службы xinetd давайте проверьте, что он прослушивает:

# lsof -i -P | fgrep 7070
xinetd    556      root    6u  IPv4 1797906      0t0  TCP vaio.ob:7070 (LISTEN)
sshd    27438 tun_zzoom    4u  IPv4 1059100      0t0  TCP localhost.localdomain:7070 (LISTEN)
# 

И действительно, соединения проходят!

2
27.01.2020, 19:35

Теги

Похожие вопросы