freebsd. можно из jail'a ходить к 127.0.0.1 ?

Phoenix

собираю мир с опциями
 

NO_ACPI= true # do not build acpiconf(8) and related programs
NO_BOOT= true # do not build boot blocks and loader
NO_BLUETOOTH= true # do not build Bluetooth related stuff
NO_FORTRAN= true # do not build g77 and related libraries
NO_GDB= true # do not build GDB
NO_GPIB= true # do not build GPIB support
NO_I4B= true # do not build isdn4bsd package
NO_IPFILTER= true # do not build IP Filter package
NO_PF= true # do not build PF firewall package
NO_AUTHPF= true # do not build and install authpf (setuid/gid)
NO_KERBEROS= true # do not build and install Kerberos 5 (KTH Heimdal)
NO_LPR= true # do not build lpr and related programs
NO_MAILWRAPPER=true # do not build the mailwrapper(8) MTA selector
NO_MODULES= true # do not build modules with the kernel
NO_NETCAT= true # do not build netcat
NO_NIS= true # do not build NIS support and related programs
NO_SENDMAIL= true # do not build sendmail and related programs
NO_SHAREDOCS= true # do not build the 4.4BSD legacy docs
NO_USB= true # do not build usbd(8) and related programs
NO_VINUM= true # do not build Vinum utilities
NO_ATM= true # do not build ATM related programs and libraries
NO_CRYPT= true # do not build any crypto code
NO_GAMES= true # do not build games (games/ subdir)
NO_INFO= true # do not make or install info files
NO_MAN= true # do not build manual pages
NO_PROFILE= true # Avoid compiling profiled libraries
NO_BIND= true # Do not build any part of BIND
NO_BIND_DNSSEC= true # Do not build dnssec-keygen, dnssec-signzone
NO_BIND_ETC= true # Do not install files to /etc/namedb
NO_BIND_LIBS_LWRES= true # Do not install the lwres library
NO_BIND_MTREE= true # Do not run mtree to create chroot directories
NO_BIND_NAMED= true # Do not build named, rndc, lwresd, etc.

cd /usr/src
make buildworld
make installworld DISTDIR=/jail/aaa
cd /usr/src/etc
make distribution DISTDIR=/jail/aaa
запускаю
jail /jail/aaa aaa.aaa 127.0.1.1 /bin/csh
%telnet 127.0.0.1 3306
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
%

Ivan8209


%telnet 127.0.0.1 3306

А что у тебя на 3306?
---
...Я работаю антинаучным аферистом...

Usmanova72

MySQL?

Phoenix

mysql
steel ~(0/2)$ telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
8
4.1.22-log:x-w4;h~`F,zW#H"n){Rf.M
^CConnection closed by foreign host.
без jail всё коннектиться

Phoenix

3306 - это от фонаря взялось.
первое, что в глаза бросилось, забинденное на 127.0.0.1

Ivan8209

А какой-нибудь фильтр не режет соединения? Или сам мускул.
Пингов пробовал посылать?
---
...Я работаю антинаучным аферистом...

Phoenix

первое правило в ipfw
allow ip from any to any via lo0
да и на другие порты тоже самое.
mysql не должен ничего резать

Phoenix

пинги не посылаются из jail.
или я не знаю, как это убрать, может sysctl переменную какую поставить

dgaf

>mysql не должен ничего резать
вы уверены, что localhost = 127.0.1.1 ?
логин-то в мускуле localhost
----
а не, похоже не в этом проблема

Ivan8209

> пинги не посылаются из jail.
Никто не избежит правосудия.
А сам интерфейс поднят?
ifconfig -a
netstat -r
---
...Я работаю...

dgaf

tcpdump не помогает?

Phoenix

косяк вроде не в настройках программы.
telnet 127.0.0.1 53
тоже не проходит
в любом случае его нужно настраивать.

Phoenix

%ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
     inet 127.0.1.1 netmask 0xff000000
%netstat -r
netstat: kvm not available
Routing tables
rt_tables: symbol not in namelist
%
то, что нет таблиц маршрутизации, как-то странно, вроде в других jail'aх я их видел

Phoenix

tcpdump не помогает?

55 steel ~(0/3)# tcpdump -i lo0 -v
tcpdump: listening on lo0, link-type NULL (BSD loopback capture size 96 bytes
17:55:20.380200 IP (tos 0x10, ttl 64, id 30053, offset 0, flags [DF], proto: TCP (6 length: 64) 127.0.1.1.60869 > 127.0.1.1.domain: S, cksum 0x5a0c (correct 2051117769:2051117769(0) win 65535 <mss 16344,nop,wscale 1,nop,nop,timestamp 1433883217 0,sackOK,eol>
17:55:20.380243 IP (tos 0x10, ttl 64, id 30054, offset 0, flags [DF], proto: TCP (6 length: 40) 127.0.1.1.domain > 127.0.1.1.60869: R, cksum 0xb4c7 (correct 0:0(0) ack 2051117770 win 0
что-то ездит, но от этого не легче

Ivan8209

Ну а пробовал насильно его сделать?
route change default 127.0.0.1
---
...Я работаю...

krishtaf

1. с таким ip-адресом в инет точно не выйдешь
2. на реальный интерфейс нужно алиас прописать с jail ip-адресом
А также:
man jail: Setting up the Host Environment, Configuring the Jail, Starting the Jail

Phoenix

даже занатить если?
а с 172.16.... можно?
разницы между ними я не вижу просто особой.
просто к внешнему(195.128.... ипу не хочется привязывать, т.к. он имеется только при включенном ppp соединении.

krishtaf

естественно занатить можно, тогда и алиас не нужен будет.
но "man jail" все равно нужно освоить

sergey_m

У меня получается:

think:~:|>jail /jail jj x.x.x.x /usr/bin/telnet 127.0.0.1 6000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
think:~:|>

В /jail находится ld-elf.so, telnet и библиотеки необходимые для чего работы. На 6000 слушают локальные иксы.

Phoenix

погоди,
давай для начала разберёмся, почему из 127.0.1.1 не виден 127.0.0.1.
я так понимаю, что jail - это некоторый продвинутый chroot, в котором процессы не могут видеть не-jail процессы, могут биндиться только на некоторые адреса и т.д.
естественно занатить можно, тогда и алиас не нужен будет.

не очень понял.
как это не нужен?
скажем есть апач на 127.0.0.1
я хочу сделать ещё апач в jail для внешних подключений.
делаю на адрес 127.0.1.1 и потом все входящии на какой-нибудь 195.1.1.1:80 -> 127.0.1.1:80

sergey_m

%ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.1.1 netmask 0xff000000
Так у тебя адреса 127.0.0.1 больше нет. Вот telnet туда и не ходок больше.

Phoenix

если процесс забинден ещё и на 127.0.1.1: port (т.е. кроме 127.0.0.1:port то всё замечательно.
сейчас затестил с named.
это как можно объяснить вообще?

Phoenix

а зачем ему чтобы он был локальным?
пусть отправляет пакет, когда тот уже будет не в jail (т.е. где-то в ядре по таблицам маршрутизации он в нужное место отправится

krishtaf

Чтобы host и jail сервисы не перепутались, имей в виду:
 
 
Since jail is implemented using IP aliases, one of the
first things to do is to disable IP services on the host system that lis-
ten on all local IP addresses for a service. If a network service is
present in the host environment that binds all available IP addresses
rather than specific IP addresses, it may service requests sent to jail
IP addresses.

У тебя named и в host и в jail окружениях крутится ?

sergey_m

а зачем ему чтобы он был локальным?
пусть отправляет пакет, когда тот уже будет не в jail (т.е. где-то в ядре по таблицам маршрутизации он в нужное место отправится
Вот он по таблицам маршрутизации и отправляется в lo0, ведь у тебя там находится сеть 127/8. Т.к. адреса 127.0.0.1 там не наблюдается, то пакеты никуда не приходят и выбрасываются.

Phoenix

если так размышлять, то забиндив jail на 10.10.10.10/24, локальным не будет адрес 10.10.10.11, поэтому пакеты до него не будут доходить.
пакеты же доставляет ядро, а оно должно знать про 127.0.0.1

Phoenix

"если процесс забинден ЕЩЁ и на 127.0.1.1: port (т.е. кроме 127.0.0.1:port то всё замечательно."
я же написал.
что это было испытание.
там ничего не было забиндено изначально

sergey_m

если так размышлять, то забиндив jail на 10.10.10.10/24, локальным не будет адрес 10.10.10.11, поэтому пакеты до него не будут доходить.
Конечно он не будет локальным. Локальным будет только 10.10.10.10.
пакеты же доставляет ядро, а оно должно знать про 127.0.0.1
Ядро ничего не знает про 127.0.0.1. Этот адрес не волшебный.

Phoenix

под ядром понималось то, что доставляет пакеты без jail.
может это и не ядро.
про знать - это то, что адрес имеется в таблице маршрутизации host, а не jail.

sergey_m

Таблица маршрутизации одна в FreeBSD, общая для всех jail. Согласно таблице маршрутизации адрес 127.0.0.1 должен находиться где-то за интерфейсом lo0. lo0 - loopback интерфейс, то есть он не умеет пакеты никуда посылать, он умеет только доставлять их локально, при условии, что dst IP address пакета является одним из адресов самого loopback интерфейса.

sergey_m

Ладно, объясню через пример. Тебя не удивляет, что у тебя сейчас команда
telnet localhost 3306
не работает не только из jail но и из host?

krishtaf

решение твоих проблем:
1. остановить все jail-ы
2.
ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0
ifconfig lo1 inet 127.0.1.1 netmask 255.0.0.0
3. jail /jail/aaa aaa.aaa 127.0.1.1 /bin/csh

Phoenix

$19:30 steel ~(0/2)$ telnet localhost 3306
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
8
4.1.22-logшxRqatE9.z,@k{H4mH]}}|w

Phoenix

1. остановить все jail-ы
2.
ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0
ifconfig lo1 inet 127.0.1.1 netmask 255.0.0.0
3. jail /jail/aaa aaa.aaa 127.0.1.1 /bin/csh

это уже намноооооого интересней.
т.е. имеет значение, какой интерфейс?
т.е. алиасы не катят вообще?
а как же куча примеров в инете?

krishtaf

алиасы нужны если ip-адрес инетовский (белый так сказать)
ты же не хочешь так делать, сам же говорил

Phoenix

я не понимаю разницы между lo0 и em0, например

krishtaf

т.е. имеет значение, какой интерфейс?

нихуя не имеет.
просто ты расхуячил используемый в host окружении ip-адрес 127.0.0.1.
можно сделать и так:
ifconfig lo13 inet 127.0.0.1 netmask 255.0.0.0
ifconfig lo0 inet 127.0.1.1 netmask 255.0.0.0

krishtaf

хуле:
man 4 em
man 4 lo

Phoenix

ifconfig lo1 inet 127.0.1.1 netmask 255.0.0.0
38 steel /jail(0/3)# ifconfig lo1
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.2.1 netmask 0xff000000
38 steel /jail(0/3)# jail /jail/pubwww pubwww.local 127.0.2.1 /usr/bin/telnet 127.0.0.1 3306
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
38 steel /jail(0/3)#

неа..

krishtaf

чувак с тебя 5 баксов за телепатию

krishtaf

у тебя есть интерфейс с 127.0.0.1 ?
Если нет - то сделай, если есть - проверь он UP или DOWN

Phoenix

нихуя не имеет.
ну конечно имеется ввиду приципиальное различие, а не номер.
т.е. различие:
127.0.0.1 и 127.0.1.1 на одном девайсе (lo0)
или на разных

sergey_m

Принципиального различия в данном случае нет.
Я так не понял есть у тебя 127.0.0.1 или нет? В начале треда ты показал, что его нет.

Phoenix

43 steel /jail(0/3)# jail /jail/pubwww pubwww.local 127.0.1.1 /sbin/ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
     inet 127.0.1.1 netmask 0xff000000
43 steel /jail(0/3)# /sbin/ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
     inet 127.0.0.1 netmask 0xff000000
     inet 127.0.1.1 netmask 0xff000000
     inet 127.0.1.2 netmask 0xff000000
43 steel /jail(0/3)#
сорри, что запутал, нужно было там написать, что это из jail запускалась команда

krishtaf

ты из host окружения результат ifconfig покажи

Phoenix

там подряд из host и из jail

krishtaf

ты лучше скажи - проблема решилась при этих настройках ?

Phoenix

если 127.0.1.1 повесить на lo1 то тоже самое.
там выше листинг

krishtaf

mysql у тебя в jail или host окружении крутится ?

Phoenix

в jail ничего не крутится.

krishtaf

в случае lo1 пересмотри правила ipfw.
для проверки поставь всё-разрешающее правило - первым.

Phoenix

первым правилом стоит
allow ip from 127.0.0.1/8 to 127.0.0.1/8

krishtaf

allow ip from 127.0.0.1/8 to 127.0.0.1/8
Может так нужно ?
allow ip from 127.0.0.0/8 to 127.0.0.0/8

Phoenix

это тоже самое
$20:38 steel ~(0/2)$ sudo ipfw add 98 allow ip from 127.0.0.1/8 to 127.0.0.1/8
00098 allow ip from 127.0.0.0/8 to 127.0.0.0/8
тут что-то странное происходит, главной странностью я по-прежнему считаю то, что поведение в jail
telnet 127.0.0.1 53
меняется если на хосте биндить named на 127.0.0.1 и на всё.
в первом случае коннекта нет, во втором есть.
как это может быть связано - я не пойму.

krishtaf

сделай allow ip from any to any

Phoenix

55 steelemail ~(0/3)# tcpdump -i lo0 -vtcpdump: listening on lo0, link-type NULL (BSD loopback capture size 96 bytes17:55:20.380200 IP (tos 0x10, ttl 64, id 30053, offset 0, flags [DF], proto: TCP (6 length: 64) 127.0.1.1.60869 > 127.0.1.1.domain: S, cksum 0x5a0c (correct 2051117769:2051117769(0) win 65535 <mss 16344,nop,wscale 1,nop,nop,timestamp 1433883217 0,sackOK,eol>17:55:20.380243 IP (tos 0x10, ttl 64, id 30054, offset 0, flags [DF], proto: TCP (6 length: 40) 127.0.1.1.domain > 127.0.1.1.60869: R, cksum 0xb4c7 (correct 0:0(0) ack 2051117770 win 0
дык вот он косяк где.
я сначала не увидел.
почему-то вместо 127.0.0.1 он коннектиться на 127.0.1.1
откуда такое поведение взялось?

krishtaf

nat ?

Phoenix

127.0.0.1/8 не натится точно.

krishtaf

бля
ну ты пидорчук
алиасы 127.0.1.1 и 127.0.2.1 нужно добавлять на lo0 с маской 255.255.255.255

Phoenix

я это давно заметил, НО учитывая, что вариант с lo1, где пох как добавлять тоже не работал тем же образом,
считаю, что это непринципиально.
(для надёжности, проверил - не принципиально)
кстати.. вроде на 127 можно и без этого (но это вопрос)
это условие(что добавлять с /32) я так понимаю нужно, чтобы не появлялось двух одинаковых записей в таблице маршрутизации, т.к. он имеено на это и ругается, когда добавляешь

RomanLeon

гы, название темы смешное... а на хрен нужен этот jail, если в инет ходить не умеет

Phoenix

ну нат на него навесить не проблема.
мне интересно, почему он так странно себя ведёт с локальным хостом.
или это не странность, а так и должно быть, просто я не понимаю чего-то

Phoenix

ничего не понимаю.
 %telnet 172.16.22.100 53
Trying 172.16.22.100...
Connected to steel.local.
Escape character is '^]'.

^C^D
^C
^C^C^C^C^C^C^CConnection closed by foreign host.
%
%
%telnet 127.0.0.1 53
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
%

172.16.22.100 - мой ип.
может это специально lo0 особенным сделали из соображений безопасности ?

Phoenix

откопал.
6.4. Restriction to one IP number.
Restricting TCP and UDP access to just one IP number was done almost entirely in the code which manages ``protocol control blocks''. When a jailed process binds to a socket, the IP number provided by the process will not be used, instead the pre-configured IP number of the jail is used.
BSD based TCP/IP network stacks sport a special interface, the loop-back interface, which has the ``magic'' IP number 127.0.0.1. This is often used by processes to contact servers on the local machine, and consequently special handling for jails were needed. To handle this case it was necessary to also intercept and modify the behaviour of connection establishment, and when the 127.0.0.1 address were seen from a jailed process, substitute the jails configured IP number.
Finally the APIs through which the network configuration and connection state may be queried were modified to report only information relevant to the configured IP number of a jailed process.

http://docs.freebsd.org/44doc/papers/jail/jail-6.html
т.е. если забиндить named на 127.0.2.1:53, иконнектиться из jail (127.0.1.1) - то всё оки.
этой чудо особенностью обладает только 127.0.0.1, видимо, чтобы не было глюков сильных
Оставить комментарий
Имя или ник:
Комментарий: