The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 02-Апр-12, 16:55  [смотреть все]
Видел несколько похожих тем но так и не нашел решения.

Дано - стоит машинка FreeBSD 9.0 + PF
2 сетевые карты, одна снаружи с белым IP, вторая внутри шлюзом у всех машин

sysctl ip.forwarding включен
gateway_enable="YES" стоит

проблема: работает NAT, работает форвард снаружи - не работает форвард изнутри на локальный порт машины
Конкретно - перехват порта 80 с заворачиванием на squid, но это в данном случае не важно т.к. не работает никакой перехват - например проброс на локальный адрес на порт 22 тоже не работает

По результатам tcpdump - пакеты на внутреннем интерфейсе видны, а на lo0 уже ничего нет

'pfctl -sa' правило редиректа показывает (fxp0 - внутренняя карточка) :
rdr pass on fxp0 inet proto tcp from 192.168.200.0/24 to any port = http -> 192.168.200.1 port 3127
  [ Evaluations: 27        Packets: 21        Bytes: 1040        States: 4     ]
  [ Inserted: uid 0 pid 82759 State Creations: 8     ]

пробую с машины 192.168.200.8, с нее разрешил вообще все (см ниже конфиг)

Конфиг PF:

ext_if="xl0"
int_if="fxp0"
internal_net=$int_if:network

tcp_services="{ 13671 }"

allowed_ports="{5190, 2041, 2042, 2043, 2044}"
web_ports="{80, 8080, 443}"
icmp_types="echoreq"

table <remote> {ИПшники}
table <priv> {ИПшники тех кто не все}

set block-policy drop
set loginterface $ext_if

set skip on ng

nat on $ext_if from $internal_net to any -> ($ext_if)

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"

rdr pass on $ext_if proto tcp from <remote> to $ext_if port  81 -> 192.168.200.1 port 81
rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 -> 192.168.200.7
rdr pass on $int_if proto tcp to !($int_if) port ftp -> 127.0.0.1 port 8021
rdr pass on $int_if proto { tcp } from $internal_net to any port 80 -> 192.168.200.1 port 3127

pass quick log from 192.168.200.8 to any
antispoof quick for { lo $int_if }
anchor "ftp-proxy/*"
block in log on $ext_if

pass in quick on $int_if from any to any
pass out quick on $int_if from any to any

pass out quick on $ext_if from ($ext_if) to any

pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services
pass in on $ext_if inet proto tcp from <remote> to 192.168.200.7 port 443 synproxy state

pass out quick on $ext_if proto udp from $internal_net to any port 123 keep state
pass out quick on $ext_if from <priv> to any

pass out on $ext_if proto {tcp, udp} from $internal_net to any port $allowed_ports


UPDATE:
а) при написании правила редиректа в виде
rdr pass on $int_if proto { tcp } from $internal_net to any port 87 -> 192.168.200.1 port 3127
Редирект при обращении на сам хост 192.168.200.1 на порт 87 работает нормально - идет коннект на висящий на машинке Сквид ('telnet 192.168.200.1 87' с машины внутри сети)
А вот например 'telnet ya.ru 87' виснет на connecting to ya.ru...

б) при написания редиректа на лупбэк:
rdr pass on $int_if proto { tcp } from $internal_net to any port 87 -> 127.0.0.1 port 3127
уже не работает ничего, ни на саму машину ни наружу

IP-адрес ya.ru резолвится нормально, проверил
машина имеет полные права ходить везде (pass quick log from 192.168.200.8 to any - в правилах)

  • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 22:46 , 02-Апр-12 (1)
    >[оверквотинг удален]
    > int_if="fxp0"
    > internal_net=$int_if:network
    > tcp_services="{ 13671 }"
    > allowed_ports="{5190, 2041, 2042, 2043, 2044}"
    > web_ports="{80, 8080, 443}"
    > icmp_types="echoreq"
    > table <remote> {ИПшники}
    > table <priv> {ИПшники тех кто не все}
    > set block-policy drop
    > set loginterface $ext_if

    Добавьте set state-policy if-bound  

    > set skip on ng

    Если это интерфейс mpd, то это вы зря. Лучше up/down скриптами добавлять\удалять правила для ВПНа.

    >[оверквотинг удален]
    > nat-anchor "ftp-proxy/*"
    > rdr-anchor "ftp-proxy/*"
    > rdr pass on $ext_if proto tcp from <remote> to $ext_if port  
    > 81 -> 192.168.200.1 port 81
    > rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443
    > -> 192.168.200.7
    > rdr pass on $int_if proto tcp to !($int_if) port ftp -> 127.0.0.1
    > port 8021
    > rdr pass on $int_if proto { tcp } from $internal_net to any
    > port 80 -> 192.168.200.1 port 3127

    Отвыкайте от этой плохой привычки втупую разрешать трафик в правилах nat/rdr. Вы же теряете контроль над ним. Лично я дополнительно прописываю потом разрешающие правила на внешний интерфейс с разрилчными лимитами. Например, доступ к рабочему столу виндовой машины в локальной сети
    rdr on $ext_if inet proto tcp from any to ($ext_if) port 3389 -> 10.11.1.2 port 3389
    pass in quick on $ext_if inet proto tcp from <me> to !(self) port 3389 (max 10)

    Теперь конкретно о вашей проблеме. Допустим, сквид или чето-там висит на 127.0.0.1:3128 и вы хотите перенаправить весь трафик от пользователей локальной сети с портом назначения 80 на локальный проксик (получается transparent proxy),
    тогда:
    rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3128
    pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3128


    >[оверквотинг удален]
    > - идет коннект на висящий на машинке Сквид ('telnet 192.168.200.1 87'
    > с машины внутри сети)
    > А вот например 'telnet ya.ru 87' виснет на connecting to ya.ru...
    > б) при написания редиректа на лупбэк:
    > rdr pass on $int_if proto { tcp } from $internal_net to any
    > port 87 -> 127.0.0.1 port 3127
    > уже не работает ничего, ни на саму машину ни наружу
    > IP-адрес ya.ru резолвится нормально, проверил
    > машина имеет полные права ходить везде (pass quick log from 192.168.200.8 to
    > any - в правилах)

    • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 10:55 , 03-Апр-12 (2)
      Сделал как вы писали:
      rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3127
      pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127
      (3127 - не опечатка, у меня сквид на 3127 слушает на транспарент-прокси)

      sockstat | grep 3127
      squid    squid      1380  13 tcp4   *:3127                *:*
      (слушает на всех интерфейсах опять же для отладки, когда заработает - повешу только на 127.0.0.1)

      Но увы, эффекта нет - tcpdump на внутреннем интерфейсе видит приходящие пакеты
      10:51:41.416794 IP 192.168.200.8.51199 > www.yandex.ru.http: Flags [S], seq 3312057733, win 8192, options [mss 1460,nop,nop,sackOK], length 0
      10:51:42.805104 IP 192.168.200.8.51201 > yandex.ru.http: Flags [S], seq 493083439, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0

      а вот на lo0 - нет ни одного пакета.

      • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 11:43 , 03-Апр-12 (3)
        >[оверквотинг удален]
        > squid    squid      1380  
        > 13 tcp4   *:3127      
        >          *:*
        > (слушает на всех интерфейсах опять же для отладки, когда заработает - повешу
        > только на 127.0.0.1)
        > Но увы, эффекта нет - tcpdump на внутреннем интерфейсе видит приходящие пакеты
        > 10:51:41.416794 IP 192.168.200.8.51199 > www.yandex.ru.http: Flags [S], seq 3312057733,
        > win 8192, options [mss 1460,nop,nop,sackOK], length 0
        > 10:51:42.805104 IP 192.168.200.8.51201 > yandex.ru.http: Flags [S], seq 493083439, win
        > 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0

        Но у меня-то работает. Причем еще и ALTQ есть. Что-то делаете не так.
        Давайте весь конфиг.

        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 12:37 , 03-Апр-12 (4)
          Вот весь текущий конфиг: (У меня тоже жила себе Free6.4, работала...)
          Ядро сейчас стоковое - компилил свое но пока откатился чтобы исключить эту возможную причину. Система ставилась сразу 9.0, + делался апдейт через cvsup самой системы и портов

          ext_if="xl0"
          int_if="fxp0"
          internal_net=$int_if:network

          tcp_services="{ 13671 }"

          allowed_ports="{5190, 2041, 2042, 2043, 2044}"
          web_ports="{80, 8080, 443}"
          icmp_types="echoreq"

          table <remote> {IP}
          table <priv> {IP, IP, IP}

          set block-policy drop
          set loginterface $ext_if
          set state-policy if-bound

          set skip on ng

          nat on $ext_if from $internal_net to any -> ($ext_if)

          nat-anchor "ftp-proxy/*"
          rdr-anchor "ftp-proxy/*"

          rdr pass on $ext_if proto tcp from <remote> to $ext_if port  81 -> 192.168.200.1
          rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 -> 192.168.200.7

          rdr pass on $int_if proto tcp to !($int_if) port ftp -> 127.0.0.1 port 8021
          rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3127
          pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127

          pass quick log from 192.168.200.8 to any

          antispoof quick for { lo $int_if }

          anchor "ftp-proxy/*"

          block in log on $ext_if

          pass in quick on $int_if from any to any
          pass out quick on $int_if from any to any

          pass out quick on $ext_if from ($ext_if) to any
          pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services
          pass in on $ext_if inet proto tcp from <remote> to 192.168.200.7 port 443 synproxy state

          pass out quick on $ext_if proto udp from $internal_net to any port 123 keep state
          pass out quick on $ext_if from <priv> to any
          pass out on $ext_if proto {tcp, udp} from $internal_net to any port $allowed_ports

          А у вас какая версия фряхи? Видел посты с похожей на мою проблемой при апгрейде с 8-ки на 9-ку

          • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 21:15 , 03-Апр-12 (5)
            >[оверквотинг удален]
            > $tcp_services
            > pass in on $ext_if inet proto tcp from <remote> to 192.168.200.7 port
            > 443 synproxy state
            > pass out quick on $ext_if proto udp from $internal_net to any port
            > 123 keep state
            > pass out quick on $ext_if from <priv> to any
            > pass out on $ext_if proto {tcp, udp} from $internal_net to any port
            > $allowed_ports
            > А у вас какая версия фряхи? Видел посты с похожей на мою
            > проблемой при апгрейде с 8-ки на 9-ку

            У меня 9. Дело в том, что в 9-ке не обовсех ошибках сообщает парсер pfctl. На эти грабли в свое время, как только вышла 9-ка наступил. Мелочная ошибка в синтаксисе, pfctl -nf /etc/pf.conf ошибки не выдает, правила загружаются, но инет не работает. Я даже PR запостил по этому поводу.

            Вот если упорядочить и упростить ваши правила, то получится что-то типа этого.

            ext_if="xl0"
            int_if="fxp0"
            internal_net=$int_if:network

            tcp_services="{ 13671 }"

            allowed_ports="{5190, 2041, 2042, 2043, 2044}"
            web_ports="{80, 8080, 443}"
            icmp_types="echoreq"

            table <remote> {IP}
            table <priv> {IP, IP, IP}

            set block-policy drop
            set loginterface $ext_if
            set state-policy if-bound

            set skip on ng

            nat on $ext_if from $internal_net to any -> ($ext_if)

            nat-anchor "ftp-proxy/*"
            rdr-anchor "ftp-proxy/*"

            rdr on $ext_if proto tcp from <remote> to $ext_if port  81 -> 192.168.200.1
            rdr on $ext_if proto tcp from <remote> to $ext_if port 443 -> 192.168.200.7

            rdr on $int_if inet proto tcp from ($int_if:network) to !($int_if) port ftp -> 127.0.0.1 port 8021
            rdr on $int_if inet proto tcp from ($int_if:network) to !($int_if) port 80 -> 127.0.0.1 port 3127

            ## antispoofing

            antispoof quick for { lo $int_if }

            ## At first block all
            block in
            block out

            ## Allow rules
            ## ext_if

            pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services
            pass in quick on $ext_if inet proto tcp from <remote> to 192.168.200.1 port 81
            pass in quick on $ext_if inet proto tcp from <remote> to 192.168.200.7 port 443

            pass out quick on $ext_if inet from $ext_if to any

            ## int_if

            anchor "ftp-proxy/*"

            pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127

            pass in quick on $int_if from ($int_if:network) to any
            pass out quick on $int_if from any to ($int_if:network)

            Непонятно это.

            pass out quick on $ext_if proto udp from $internal_net to any port 123 keep state

            Так не получится, т.к. после ната на внешнем интерфейсе локальных адресов уже нет. Выход таков. Тегировать пакеты на внутреннем ифейсе а потом выпускать их на внешнем. Как это делать читайте в FAQe на openbsd.org

            pass out quick on $ext_if from <priv> to any
            pass out on $ext_if proto {tcp, udp} from $internal_net to any port $allowed_ports


            • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 11:32 , 04-Апр-12 (6)
              Сейчас попробую ваши причесанные правила.
              Судя по всему у меня проблема с недопониманием НАТа, свято верил что на внешнем интерфейсе можно по отправителю из локальной сети фильтровать :)
              Посмотрел на дамп, понял всю глубину своего заблуждения...

              UPDATE
              прописал ровно ваш конфиг без последних трех бесполезных правил. Проброса внутри так и нет.
              Не может быть такого что в стоковом ядре нужно что-то включить через sysctl например?

              У меня возникло смутное дежавю - разве при перенаправлении в дампе нет в скобках указания куда оно идет? На вашей системе дамп выглядит так же? (хотя возможно путаю с записами таблицы состояний)

              tcpdump -i fxp0 -vv | grep 192.168.200.8
                  192.168.200.8.63629 > www.yandex.ru.http: Flags [S], cksum 0x8cfb (correct), seq 3067585866, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0

              pfctl -sn
              nat on xl0 inet from 192.168.200.0/24 to any -> (xl0) round-robin
              nat-anchor "ftp-proxy/*" all
              rdr-anchor "ftp-proxy/*" all
              rdr on xl0 inet proto tcp from <remote> to [IP] port = hosts2-ns -> 192.168.200.1
              rdr on xl0 inet proto tcp from <remote> to [IP] port = https -> 192.168.200.7
              rdr on fxp0 inet proto tcp from (fxp0:network) to ! (fxp0) port = ftp -> 127.0.0.1 port 8021
              rdr on fxp0 inet proto tcp from (fxp0:network) to ! (fxp0) port = http -> 127.0.0.1 port 3127

              pfctl -ss | grep 192.168.200.8
              fxp0 udp 255.255.255.255:1947 <- 192.168.200.8:60474       NO_TRAFFIC:SINGLE
              fxp0 udp 192.168.200.255:1947 <- 192.168.200.8:60474       NO_TRAFFIC:SINGLE
              fxp0 tcp 127.0.0.1:3127 (93.158.134.3:80) <- 192.168.200.8:63707       CLOSED:SYN_SENT
              fxp0 tcp 127.0.0.1:3127 (93.158.134.203:80) <- 192.168.200.8:63711       CLOSED:SYN_SENT
              fxp0 tcp 127.0.0.1:3127 (213.180.193.3:80) <- 192.168.200.8:63712       CLOSED:SYN_SENT

              pfctl -sr
              block drop in quick on ! lo inet6 from ::1 to any
              block drop in quick on ! lo inet from 127.0.0.0/8 to any
              block drop in quick inet from 127.0.0.1 to any
              block drop in quick on ! fxp0 inet from 192.168.200.0/24 to any
              block drop in quick inet from 192.168.200.1 to any
              block drop in quick inet6 from ::1 to any
              block drop in quick on lo0 inet6 from fe80::1 to any
              block drop in quick on fxp0 inet6 from [fe80:IPv6] to any
              block drop in all
              block drop out all
              pass in on xl0 inet proto tcp from any to (xl0) port = ssh-nst flags S/SA keep state (if-bound)
              pass in quick on xl0 inet proto tcp from <remote> to 192.168.200.1 port = hosts2-ns flags S/SA keep state (if-bound)
              pass in quick on xl0 inet proto tcp from <remote> to 192.168.200.7 port = https flags S/SA keep state (if-bound)
              pass out quick on xl0 inet from [IP] to any flags S/SA keep state (if-bound)
              anchor "ftp-proxy/*" all
              pass in log quick on fxp0 inet proto tcp from (fxp0:network) to 127.0.0.1 port = 3127 flags S/SA keep state (if-bound)
              pass in quick on fxp0 from (fxp0:network) to any flags S/SA keep state (if-bound)
              pass out quick on fxp0 from any to (fxp0:network) flags S/SA keep state (if-bound)


              • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 13:04 , 04-Апр-12 (7)
                >[оверквотинг удален]
                > port = https flags S/SA keep state (if-bound)
                > pass out quick on xl0 inet from [IP] to any flags S/SA
                > keep state (if-bound)
                > anchor "ftp-proxy/*" all
                > pass in log quick on fxp0 inet proto tcp from (fxp0:network) to
                > 127.0.0.1 port = 3127 flags S/SA keep state (if-bound)
                > pass in quick on fxp0 from (fxp0:network) to any flags S/SA keep
                > state (if-bound)
                > pass out quick on fxp0 from any to (fxp0:network) flags S/SA keep
                > state (if-bound)

                Вы же клиент никак не настраивали? Прокси не прописывали? Тут не надо все прозрачно.

                У меня подозрения, что сам прокси не работает. Попробуйте прописать клиенту прокси, повесить его на внутренний адрес и проверти его работу, а уже потом прозрачно.

                Уменя внутри несколько сетевых в мосте. Редирект ДНС на внешний и НТТР на локалхост на прокси. Все работает отлично.

                rdr on bridge0 inet proto tcp from (bridge0:network) to ! (self) port = domain -> 193.58.251.251 port 53
                rdr on bridge0 inet proto udp from (bridge0:network) to ! (self) port = domain -> 193.58.251.251 port 53
                rdr on bridge0 inet proto tcp from (bridge0:network) to ! (self) port = http -> 127.0.0.1 port 31280

                • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 13:50 , 04-Апр-12 (8)
                  Нет, клиент не настраивал никак. Клиент - и браузер и просто telnet

                  Сам прокси работает, через него в инет все ходят исправно. И сокстат его показывает, и коннект на него напрямую есть:

                  C:\Users\user>telnet ya.ru 80
                  Connecting To ya.ru...Could not open connection to the host, on port 80: Connect
                  failed

                  C:\Users\user>telnet 192.168.200.1 3127
                  все хорошо, есть коннект, на запрос Сквид выдает страницу

                  UPDATE
                  На самой Фре - локально ничего не коннектится...

                  []# telnet 192.168.200.1 3128
                  Trying 192.168.200.1...
                  telnet: connect to address 192.168.200.1: Operation not permitted
                  telnet: Unable to connect to remote host

                  telnet 127.0.0.1 25
                  Trying 127.0.0.1...
                  telnet: connect to address 127.0.0.1: Operation not permitted
                  telnet: Unable to connect to remote host

                  telnet 192.168.200.1 25
                  Trying 192.168.200.1...
                  telnet: connect to address 192.168.200.1: Operation not permitted
                  telnet: Unable to connect to remote host

                  Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети работают на ура

                  UPDATE2
                  Добавил в конфиг set skip on lo0 - telnet 127.0.0.1 3127 поехал
                  но с внешнего клиента так и не коннект


                  • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 14:05 , 04-Апр-12 (9)
                    >[оверквотинг удален]
                    > Trying 127.0.0.1...
                    > telnet: connect to address 127.0.0.1: Operation not permitted
                    > telnet: Unable to connect to remote host
                    > telnet 192.168.200.1 25
                    > Trying 192.168.200.1...
                    > telnet: connect to address 192.168.200.1: Operation not permitted
                    > telnet: Unable to connect to remote host
                    > Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети
                    > работают на ура
                    > Добавил set skip on lo0 - эффекта нет

                    Правила правильно перегружаете? pfctl -F rules /etc/pf.conf и pfctl -F nat /etc/pf.conf ?

                    Ну не знаю. Пробуйте на виртуалке отладить. Поочереди исключая все возможные ошибки.

                    • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 14:06 , 04-Апр-12 (10)
                      >[оверквотинг удален]
                      >> telnet: Unable to connect to remote host
                      >> telnet 192.168.200.1 25
                      >> Trying 192.168.200.1...
                      >> telnet: connect to address 192.168.200.1: Operation not permitted
                      >> telnet: Unable to connect to remote host
                      >> Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети
                      >> работают на ура
                      >> Добавил set skip on lo0 - эффекта нет
                      >  Правила правильно перегружаете? pfctl -F rules /etc/pf.conf и pfctl -F nat
                      > /etc/pf.conf ?

                        Так правильнее -)
                      pfctl -F rules -f /etc/pf.conf
                        .....

                      • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 14:17 , 04-Апр-12 (11)
                        делаю просто pfctl -f /etc/test.conf (чтобы если что накосячу - при ребуте обратно все встало)
                        Такой вызов ведь очищает старые правила и грузит новые - или у меня снова недостаток знаний? :))
                        Смотрел по выводу 'pfctl -sr' вроде правила подменяются

                        Для очистки совести сделал полный флаш
                        pfctl -F all -f /etc/pfc.cnf
                        но результата так и нет
                        (заапдейтил старый пост - telnet после set skip on lo0 стал подключаться на 127.0.0.1 но в общем и все)

                        Виртуалка - да, уже поднята под это дело...  
                        Если интересно - отпишусь по результатам

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 17:58 , 04-Апр-12 (12)
                          Приколы нашего городка :)
                          На свежеустановленной виртуалке с ровно тем же конфигом (копипаст кроме ессно имен интерфейсов) редирект работает

                          Ядро то же стоковое, осталось только одно отличие - я на живом сервере обновлял World, конфы там все брал дефолтные т.к. делал это сразу еще на пустой машине

                          sysctl net.inet - существенных отличий не нашел, нет такого чтобы где-то было 1 где-то 0

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 23:18 , 07-Апр-12 (13)
                          Печально - но проблема так и не решилась обновлением исходников и пересборкой ядра и мира ...
                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 23:37 , 07-Апр-12 (14)
                          > Печально - но проблема так и не решилась обновлением исходников и пересборкой
                          > ядра и мира ...

                          Хм... Как обновляли, пересобирали?..

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 23:58 , 07-Апр-12 (15)
                          Обновил через cvsup
                          (часть конфига)
                          *default release=cvs tag=RELENG_9
                          src-all

                          далее - по хэндбуку

                          make buildworld
                          make buildkernel (сначала скомпилил и поставил GENERIC)
                          make installkernel
                          reboot
                          make installworld
                          mergemaster

                          когда убедился что все завелось (но не завелось то что мне нужно :) ) - собрал кастомное ядро на основе стандартного, сильно не допиливал - убрал ненужные дрова сети и добавил pf и ALTQ в ядро

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! artemrts, 00:41 , 08-Апр-12 (16)
                          >[оверквотинг удален]
                          > make buildworld
                          > make buildkernel (сначала скомпилил и поставил GENERIC)
                          > make installkernel
                          > reboot
                          > make installworld
                          > mergemaster
                          > когда убедился что все завелось (но не завелось то что мне нужно
                          > :) ) - собрал кастомное ядро на основе стандартного, сильно не
                          > допиливал - убрал ненужные дрова сети и добавил pf и ALTQ
                          > в ядро

                          Если быть точным, то хронология такова:

                          1.  cd /usr/src
                          2.  make buildworld
                          3.  make buildkernel KERNCONF=Имя_конфига_ядра_указанного_в_опции_ident
                          4.  make installkernel KERNCONF=Имя_конфига_ядра_указанного_в_опции_ident
                          5.  reboot        (in single user mode: boot -s from the loader prompt).
                          6.  mergemaster -p
                          7.  make installworld
                          8.  make delete-old
                          9.  mergemaster -iUF
                          10. reboot
                          11. make delete-old-libs

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 20:22 , 08-Апр-12 (17)
                          Странно - в хэндбуке эти шаги опущены
                          8.  make delete-old
                          11. make delete-old-libs
                          В остальном все именно так и делал (про KERNCONF= скипнул т.к. без этой опции кастомное ярдо не собрать все равно никак )

                          ну да не суть
                          mergemaster -p я скипнул т.к. а) делал его при первом обновлении и б) сервак на удаленке, физического доступа у меня к нему нет соотв. в сингл-юзер его выводить не стоит :)

                          Есть у меня мысль как буду физически у сервака поиграться интерфейсами, может просто поменять местами или другие сетевые платы поставить... Других идей пока больше нет

                        • И снова Free9.0 + PF: NAT есть, проброса нет, !*! Yarikson, 18:33 , 26-Апр-12 (18)
                          Переписал конфу - сделал с тегированием пакетов, но счастье не произошло... проброс снаружи так и есть, проброса изнутри так и нет.

                          Физически пока не добрался до сервака чтобы с интерфейсами поиграться

                          Как бы это дело подебагить - что происходит с пакетом после его прихода на внутренний интерфейс, почему он теряется... ?

                          конфа стала такой:

                          ext_if="xl0"
                          int_if="fxp0"
                          internal_net="192.168.200.0/24"

                          tcp_services="{ PORT }"

                          allowed_ports="{5190, 2041, 2042, 2043, 2044}"
                          web_ports="{80, 8080, 443}"
                          icmp_types="echoreq"

                          table <remote> {IP}
                          table <priv> {IP, IP, IP }

                          set block-policy drop
                          set loginterface $ext_if

                          set skip on lo

                          scrub in

                          nat on $ext_if from !($ext_if) tagged USER_TRAFFIC -> ($ext_if:0)
                          nat on $ext_if from !($ext_if) tagged PRIV_TRAFFIC -> ($ext_if:0)

                          nat-anchor "ftp-proxy/*"
                          rdr-anchor "ftp-proxy/*"

                          rdr pass on $ext_if proto tcp from <remote> to $ext_if port  80 tag REMOTE_WEB -> 192.168.200.7
                          rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 tag REMOTE_HTTPS -> 192.168.200.7

                          rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port ftp -> 127.0.0.1 port 8021
                          rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port 80  -> 127.0.0.1 port 3127
                          rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port 81  -> 127.0.0.1 port 8181

                          block all

                          antispoof quick for { lo $int_if }

                          anchor "ftp-proxy/*"

                          pass quick on lo0

                          pass out quick on $int_if from any to $int_if:network
                          pass in quick on $int_if from $int_if:network to $int_if

                          pass out quick on $ext_if from ($ext_if) to any
                          pass in quick on $ext_if tagged REMOTE_WEB synproxy state
                          pass in quick on $ext_if tagged REMOTE_HTTPS synproxy state

                          pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services

                          pass in on $int_if inet proto tcp from $int_if:network to !($int_if) port $allowed_ports tag USER_TRAFFIC
                          pass in on $int_if from <priv> to !($int_if) tag PRIV_TRAFFIC

                          pass in on $ext_if from <remote> to any




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру