Страница 1 из 1

ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-27 14:23:44
alive_corpse
Добрый день! Прочитал несколько статей по настройке проброса порта с помощью natd, ядерного ната и redir, но мои попытки не увенчались успехом. Собственно, задача заключается в следующем: есть удалённый сервер (B), на котором стоит svn, через ssh-туннелинг я прокидываю порт того удалённого сервера на другой сервер (A). Соответственно, у сервера A открыт порт 3690 на локалхосте. Сервер A имеет интерфейс em0 с адресом 192.168.8.200, на который я хочу пробросить этот самый порт 3690 с локалхоста. Ядро собрано без поддержки ядерного ната, но насколько я понял, это не обязательное условие функционирования для проброса портов.

Код: Выделить всё

[root@us-sandbox:/etc]# nmap -p 3690 127.0.0.1

Starting Nmap 5.61TEST5 ( http://nmap.org ) at 2012-04-27 04:18 PDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000077s latency).
PORT     STATE SERVICE
3690/tcp open  svn

Nmap done: 1 IP address (1 host up) scanned in 1.18 seconds
[root@us-sandbox:/etc]# sysctl net.inet.ip.fw.one_pass
net.inet.ip.fw.one_pass: 1
cat rc.conf
hostname="us-sandbox.xsolla.com"
ifconfig_em0=" inet 192.168.8.200 netmask 255.255.255.0"
defaultrouter="192.168.8.1"

firewall_enable="YES"
firewall_type="OPEN"

firewall_nat_enable="YES"
dummynet_enable="YES"
Настраиваю файрвол следующим образом:

Код: Выделить всё

ipfw nat 3 config if em0 log redirect_port tcp 127.0.0.1:3690 3690
ipfw add 2000 nat 3 ip from 192.168.8.200 to any out via em0
ipfw add 2001 nat 3 ip from any to 192.168.8.200 in via em0
При сканировании портов с самой машины получаю, что порт 3690 закрыт, при сканировании извне - filtered.

Подскажите пожалуйста, что я делаю не так и в какую сторону копать?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:05:45
Gloft

Код: Выделить всё

ipfw show
Посмотри какие правила срабатывают,а какие нет.
Можно второе и третье правило временно заменить на:

Код: Выделить всё

ipfw add 2000 nat 3 ip from any to any via em0

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:33:30
alive_corpse
ipfw show:

Код: Выделить всё

02000 288857 49224567 nat 3 ip from 192.168.8.200 to any out via em0
02001 291921 69067158 nat 3 ip from any to 192.168.8.200 in via em0
65533  61918  8281064 allow ip from any to any
65535   1401   163051 deny ip from any to any
При скане извне порт "filtered". Предложенный вариант:

Код: Выделить всё

[root@us-sandbox:/etc]# ipfw add 2000 nat 3 ip from any to any via em0
02000 nat 3 ip from any to any via em0
[root@us-sandbox:/etc]# ipfw show
02000    94   11420 nat 3 ip from any to any via em0
65533 62684 8376949 allow ip from any to any
65535  1401  163051 deny ip from any to any
После этого при скане извне порт "closed".

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:39:30
Gloft
С какого порта на сервере B и на какой порт и интерфейс на сервере А ты пробрасываешь SVN?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:47:37
alive_corpse
Порты одинаковы. 3690 и там и там.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:49:59
Gloft
А в чем причина того, что проброс идет на 127.0.0.1?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 9:51:58
Gloft
С какой машины и какой командой ты понимаешь ssh туннель?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 10:03:21
alive_corpse
Я бы с радостью пробросил порт ssh-ем на отличный от lo интерфейс, но к сожалению, нигде не нашёл информации о том, как это сделать.

Код: Выделить всё

sudo ssh2svn ssh -2 -N -C -L 3690:127.0.0.1:3690 ssh2svn@<тут ip удалённого сервера> -p <и его порт соответственно> & 
127.0.0.1 - это ip с которого нужно было пробросить SVN. Можно было подставить и серый адрес сервера - без разницы в принципе. С локалхоста на сервере А после такого проброса всё работает замечательно.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 10:10:21
Gloft
У тебя в rc.conf стоит firewall_type="OPEN".
Насколько я помню это подразумевает использование штатного скрипта настройки.
А где тогда ты прописываешь правила? Или может ты их ручками добавляешь после старта машины?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 10:13:42
alive_corpse
Пока руками, потом скрипт допишу.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 10:24:01
Gloft
После этого при скане извне порт "closed".
Проверяешь из сети 192.168.8.0?

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 10:26:29
alive_corpse
Да. Скан делаю из той же подсетки.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 11:38:11
Gloft

Код: Выделить всё

ipfw nat 3 config if em0 log redirect_port tcp 127.0.0.1:3690 3690
ipfw add 2000 nat 3 ip from 192.168.8.200 to any out via em0
ipfw add 2001 nat 3 ip from any to 192.168.8.200 in via em0
Описание работы ната http://www.lissyara.su/articles/freebsd ... /ipfw_nat/, схема 2-я.
Не пойму зачем 2000-е правило ведь пакеты уже должны были пройти нат.
В 2001 правиле можно уточнить пересылать на нат только те пакеты которые идут на порт 3690, т.е.:

Код: Выделить всё

ipfw add 2001 nat 3 ip from any to 192.168.8.200 3690 in via em0
Посмотри что покажет:

Код: Выделить всё

tcpdump -i lo0

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 11:50:59
Gloft
Мне кажется причина в том, что нат стоит не на том интерфейсе.
Ты его поставил на em0, а скорей всего надо было поставить на lo0.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 15:59:22
alive_corpse
До скана снаружи:

Код: Выделить всё

[root@us-sandbox:/etc]# ipfw show
02001     0       0 nat 3 ip from any to 192.168.8.200 dst-port 3690 in via em0
65533 70174 9683359 allow ip from any to any
65535  1401  163051 deny ip from any to any
После скана снаружи:

Код: Выделить всё

[root@us-sandbox:/etc]# ipfw show
02001     2      88 nat 3 ip from any to 192.168.8.200 dst-port 3690 in via em0
65533 70409 9725193 allow ip from any to any
65535  1401  163051 deny ip from any to any
До лупбека ничего не долетает. Чего-то я не понимаю. У меня ведь в любом случае должен быть em0 как бы внешним интерфейсом.

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 16:08:59
Gloft
Попробуй так:

Код: Выделить всё

ipfw nat 3 config if lo0 log redirect_port tcp 127.0.0.1:3690 3690
ipfw add 2000 nat 3 ip from any to 192.168.8.200 3690 in via em0
ipfw add 2001 nat 3 ip from 127.0.0.1:3690 to any out via lo0

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 16:31:23
alive_corpse

Код: Выделить всё

[root@us-sandbox:/etc]# ipfw nat 3 config if lo0 log redirect_port tcp 127.0.0.1:3690 3690
ipfw nat 3 config if lo0 log redirect_port tcp 127.0.0.1:3690 3690
[root@us-sandbox:/etc]# ipfw add 2000 nat 3 ip from any to 192.168.8.200 3690 in via em0
02000 nat 3 ip from any to 192.168.8.200 dst-port 3690 in via em0
[root@us-sandbox:/etc]# ipfw add 2001 nat 3 ip from 127.0.0.1:3690 to any out via lo0
02001 nat 3 ip from 0.0.0.0:0.0.14.106 to any out via lo0

ipfw show
02000      0        0 nat 3 ip from any to 192.168.8.200 dst-port 3690 in via em0
02001      0        0 nat 3 ip from 0.0.0.0:0.0.14.106 to any out via lo0
65533 113555 18568237 allow ip from any to any
65535   1401   163051 deny ip from any to any
Порт снаружи по-прежнему закрыт. При скане tcpdump на лупбеке молчит, пакеты попадают только в цепочку:

Код: Выделить всё

02000      4      176 nat 3 ip from any to 192.168.8.200 dst-port 3690 in via em0

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 19:24:06
Gloft
Собрал на виртуалке стенд, попробовал, все отлично работает.
У тебя скорей все проблема в фаерволе.
А точнее из-за тех правил которые он создает по умолчанию в режиме OPEN.
Правила ipwf как есть:

Код: Выделить всё

hostB# ipfw show
00100 126 25104 allow ip from any to any via lo0
00400   0     0 deny ip from any to ::1
00500   0     0 deny ip from ::1 to any
00600   0     0 allow ipv6-icmp from :: to ff02::/16
00700   0     0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800   0     0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900   0     0 allow ipv6-icmp from any to any ip6 icmp6types 1
01000   0     0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
02000 501 59815 nat 1 ip from any to any via em0
65000   0     0 allow ip from any to any
65534   0     0 deny ip from any to any
65535  29  3168 deny ip from any to any
/etc/rc.conf

Код: Выделить всё

hostB# cat /etc/rc.conf
hostname="hostB"
sshd_enable="YES"

ifconfig_em0="inet 192.168.45.51  netmask 255.255.255.0"
defaultrouter="192.168.45.1"

firewall_enable="YES"
firewall_type="/etc/firewall"

firewall_nat_enable="YES"
dummynet_enable="YES"
/etc/firewall

Код: Выделить всё

hostB# cat /etc/firewall
nat 1 config if em0 log redirect_port tcp 127.0.0.1:8080 8080
add 2000 nat 1 ip from any to any via em0
add 65000 allow all from any to any
add 65534 deny all from any to any

Re: ipfw+nat проброс порта на локалхост

Добавлено: 2012-04-28 23:07:30
alive_corpse
Спасибо огромное за заботу! С начала рабочей недели попробую ещё.