URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4197
[ Назад ]

Исходное сообщение
"Портмаппинг и ng_nat"

Отправлено pauliceman , 22-Мрт-09 23:17 
На шлюзе поднят ng_nat. Работает без вопросов. Возникла необходимость пробросить порт на серый IP-шник. Исходя из man:

NGM_NAT_REDIRECT_PORT (redirectport )
    Redirect incoming connections arriving to given port(s) to another host and port(s). The following Vt struct ng_nat_redirect_port must be supplied as argument.

    #define NG_NAT_DESC_LENGTH      64
    struct ng_nat_redirect_port {
            struct in_addr  local_addr;
            struct in_addr  alias_addr;
            struct in_addr  remote_addr;
            uint16_t        local_port;
            uint16_t        alias_port;
            uint16_t        remote_port;
            uint8_t         proto;
            char            description[NG_NAT_DESC_LENGTH];
    };

    Redirection is assigned an unique ID which is returned as response to this message, and information about redirection added to list of static redirects which later can be retrieved by NGM_NAT_LIST_REDIRECTS message.

пытаюсь сделать следующее:
ngctl msg nat0: redirectport { local_addr=xx.xx.xx.xx alias_addr=xx.xx.xx.xx remote_addr=xx.xx.xx.xx local_port=18884 alias_port=18884 remote_port=18884 proto=tcp descripton="test" }

Результат: ngctl: send msg: Function not implemented.
Ради интереса даю: ngctl msg nat0: listredirects
Результат тот же: ngctl: send msg: Function not implemented.
Тогда пробую:
>ngctl msg nat0: nodeinfo

Rec'd response "nodeinfo" (805306374) from "[11]:":
Args:   { name="nat0" type="nat" id=0x11 hooks=2 }

Т.е. именно функции специфичные для nat_ng по какой-то причине не доступны. Может кто подскажет, где собака зарыта???

>kldstat

Id Refs Address    Size     Name
1   15 0xc0400000 90687c   kernel
2    1 0xc0d07000 1a04     ng_nat.ko
3    8 0xc0d09000 d3a0     netgraph.ko
4    2 0xc0d17000 9a54     libalias.ko
5    1 0xc0d21000 280c     ng_ipfw.ko
6    2 0xc0d24000 ea78     ipfw.ko
7    1 0xc0d33000 6a32c    acpi.ko
8    1 0xc1ee2000 4000     logo_saver.ko
9    1 0xc1f15000 5000     ng_netflow.ko
10    1 0xc1f39000 4000     ng_ether.ko
11    1 0xc1f3d000 2000     ng_split.ko
12    1 0xc1f40000 4000     ng_socket.ko
13    1 0xc2247000 5000     ng_ksocket.ko

>ngctl list

There are 9 total nodes:
  Name: ngctl1468       Type: socket          ID: 00000038   Num hooks: 0
  Name: nat0            Type: nat             ID: 00000011   Num hooks: 2
  Name: <unnamed>       Type: ksocket         ID: 0000000c   Num hooks: 1
  Name: split0          Type: split           ID: 00000009   Num hooks: 3
  Name: netflow0        Type: netflow         ID: 00000006   Num hooks: 7
  Name: ral0            Type: ether           ID: 00000004   Num hooks: 0
  Name: vr1             Type: ether           ID: 00000003   Num hooks: 0
  Name: vr0             Type: ether           ID: 00000002   Num hooks: 0
  Name: ipfw            Type: ipfw            ID: 00000001   Num hooks: 5


Содержание

Сообщения в этом обсуждении
"Портмаппинг и ng_nat"
Отправлено pauliceman , 28-Мрт-09 23:25 
Странно, решил на этой машинке глянуть ман по ng_nat, а там про эту функцию  ни слова, да и функций всего три упоминается (setaliasaddr, setmode, settarget). Фря седьмая.
7.0-RELEASE-p6 FreeBSD 7.0-RELEASE-p6 #1: Sun Mar 15 18:33:45 EET 2009
А вроде в седьмой фре в nat_ng форвардинг портов идет сходу, ничего патчить не нужно.... Странно...

"Портмаппинг и ng_nat"
Отправлено pauliceman , 28-Мрт-09 23:27 
Мир что-ли собрать?

"Портмаппинг и ng_nat"
Отправлено pauliceman , 29-Мрт-09 15:30 
Итак, судя по содержимому моего ng_nat.c - ng_nat имеет только 3 мессейджа (никакого форвардинга и близко нет):

[/usr/src/sys/netgraph]>vi ng_nat.c
/* List of commands and how to convert arguments to/from ASCII. */
static const struct ng_cmdlist ng_nat_cmdlist[] = {
        {
          NGM_NAT_COOKIE,
          NGM_NAT_SET_IPADDR,
          "setaliasaddr",
          &ng_parse_ipaddr_type,
          NULL
        },
        {
          NGM_NAT_COOKIE,
          NGM_NAT_SET_MODE,
          "setmode",
          &ng_nat_mode_type,
          NULL
        },
        {
          NGM_NAT_COOKIE,
          NGM_NAT_SET_TARGET,
          "settarget",
          &ng_parse_ipaddr_type,
          NULL
        },
        { 0 }
};

Вопрос - как заполучить более функциональный nat_ng? Неужели придется перестраивать весь мир??? Ужжасно не хочетя этого делать, т.к. машинка слабая и процесс этот займет уйму времени.


"Портмаппинг и ng_nat"
Отправлено NoSFeRaTU , 07-Апр-09 14:51 
>Вопрос - как заполучить более функциональный nat_ng? Неужели придется перестраивать весь мир???
>Ужжасно не хочетя этого делать, т.к. машинка слабая и процесс этот
>займет уйму времени.

Оригинальный патч находится здесь: http://www.antigreen.org/vadim/freebsd/ng_nat, с марта 2008 он с небольшими изменениями закомменчен в 6 и 7 ветки, так что если ядро у тебя более старое - можешь собрать модуль и подсунуть его, но лучше полноценно обновиться.


"Портмаппинг и ng_nat"
Отправлено pauliceman , 11-Апр-09 14:20 
>лучше полноценно обновиться.

Обновил мир. ситуация все та-же.

>uname -a

FreeBSD freepaulshost1.localdomain 7.0-RELEASE-p11 FreeBSD 7.0-RELEASE-p11 #0: Sat Apr 11 10:29:16 EEST 2009     root@freepaulshost1.localdomain:/usr/obj/usr/src/sys/mycore_003  i386

>ngctl msg nat0: listredirects

ngctl: send msg: Function not implemented

бредддд.


"Портмаппинг и ng_nat"
Отправлено pauliceman , 12-Апр-09 17:40 
Ура! Обновился до FreeBSD 7.1-RELEASE-p4 и portredirect в ng_nat уже присутсвует.
Пишем следующее:
ngctl msg nat0: redirectport { local_addr=xx.xx.xx.xx alias_addr=xx.xx.xx.xx remote_addr=xx.xx.xx.xx local_port=18884 alias_port=18884 remote_port=18884 proto=tcp description="test" }
получаем ошибку о неверном аргументе. Может где-то кавычек доставить? Или...?

"Портмаппинг и ng_nat"
Отправлено pauliceman , 12-Апр-09 20:12 
Разобрался...

Посмотреть активные редиректы (где nat0 - имя ноды типа nat):
ngctl msg nat0: listredirects

Удалить редирект (параметр - id редиректа(в моем случае удаляется редирект с id==8)):
ngctl msg nat0: redirectdelete 8

Перенаправить tcp-порт (tcp, т.к. proto==6; local_addr - IP-адрес хоста с серым IP на который необходимо перенаправить; alias_addr - IP-адрес внешний, в который все серые адреса маскарадятся; local_port и alias_port - соответсвенные порты.):
ngctl msg nat0: redirectport { local_addr='192.168.1.1' alias_addr='x.x.x.x' local_port='18884' alias_port='18884' proto=6 }

Можно еще указать remote_port и remote_addr, если необходимо форвардить пакеты только от определенного хоста или с определенного порта.


"Портмаппинг и ng_nat"
Отправлено xOr , 22-Май-09 23:49 
>[оверквотинг удален]
>
>ngctl msg nat0: redirectdelete 8
>
>Перенаправить tcp-порт (tcp, т.к. proto==6; local_addr - IP-адрес хоста с серым IP
>на который необходимо перенаправить; alias_addr - IP-адрес внешний, в который все
>серые адреса маскарадятся; local_port и alias_port - соответсвенные порты.):
>ngctl msg nat0: redirectport { local_addr='192.168.1.1' alias_addr='x.x.x.x' local_port='18884' alias_port='18884' proto=6 }
>
>Можно еще указать remote_port и remote_addr, если необходимо форвардить пакеты только от
>определенного хоста или с определенного порта.

А не подскажите как description указывать?
У меня тоже не получается.  Хотя адреса и порты без заключения в кавычки принимает.