[Решено] Проброс портов для пакетов, исходящих с самой машины (Vyatta)

Автор arfa, 15 мая 2013, 11:27:27

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

arfa

В качестве шлюза в сеть интернет используется компьютер с Vyatta Core 6.5R1 (сетевая операционная система на основе Debian с настройкой собственными командами через CLI - как в аппаратных роутерах - при этом выполняются perl-скрипты, которые выполняют необходимые настройки в Debian).

В локальной сети имеется web-сервер, на который на шлюзе проброшен порт TCP/80. И из интернета, и из локальной сети все замечательно работает - доступ к внешнему IP на порт 80 имеется (попадаем на web-cервер). Однако, на самом компьютере-шлюзе доступа через внешний IP на порт 80 нет, при проверке телнетом пишет:

# telnet внешний_IP-адрес 80
telnet: can't connect to remote host (внешний_IP-адрес): Connection refused

По этой причине из локальной сети невозможно подключиться к этому web-серверу через прокси-сервер, который крутится на том же компьютере-шлюзе.
По какой причине не работает проброс порта для пакетов, исходящих с самого компьютера-шлюза?

Настройки шлюза следующие:
interfaces {
    ethernet eth0 {
        address 192.168.1.1/24
        description LAN
    }
    ethernet eth1 {
        address EXTERNAL_ADDRESS/24
        description Internet
    }
}
nat {
    destination {
        rule 10 {
            destination {
                address EXTERNAL_ADDRESS
                port 80
            }
            inbound-interface any
            protocol tcp
            translation {
                address 192.168.1.2
            }
        }
    }
    source {
        rule 10 {
            outbound-interface eth1
            translation {
                address masquerade
            }
        }
        rule 20 {
            outbound-interface eth0
            source {
                address 192.168.179.0/24
            }
            translation {
                address masquerade
            }
        }
    }
}
service {
    dns {
        forwarding {
            listen-on eth0
        }
    }
    webproxy {
        default-port 8080
        listen-address 192.168.1.1 {
            disable-transparent
        }
    }
}
system {
    gateway-address PROVIDER_GATEWAY_ADDRESS
    name-server 8.8.8.8
    host-name router
    time-zone Europe/Moscow
}

fry

Думаю, это то, что вам нужно. Если есть доступ не только к cli, а и к bash (sh) http://www.opennet.ru/docs/RUS/iptables/#DNATTARGET
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

arfa

#2
Да, это то, что нужно, спасибо!
Нужно прописать правило трансляции адреса назначения в цепочку OUTPUT:

#sudo iptables -t nat -A OUTPUT -d EXTERNAL_ADDRESS/32 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2

После этого проброс порта TCP/80 заработал и изнутри машины!

Не знает ли кто - как командами Vyatta это же сделать?
В Vyatta "nat destination" прописывает правило в цепочку PREROUTING, "nat source" - в POSTROUTING, а как в OUTPUT - не нашел.

А то после перезагрузки правило пропадает.

P. S. Проблему решил!
Судя по документации Vyatta в нем не реализована "nat OUTPUT" - в цепочке после "Local Process" идет "Routing" и потом сразу заходит на "SNAT". Значит прописывать правила в цепочке OUTPUT нужно вручную. В Vyatta имеется скрипт (/opt/vyatta/etc/config/scripts/vyatta-postconfig-bootup.script), который вызывается при загрузке сразу после применения настроек из собственного конфигурационного файла. Все действия, не реализуемые средствами Vyatta, нужно прописывать в этом скрипте.
Я прописал в нем:
/sbin/iptables -t nat -A OUTPUT -d EXTERNAL_ADDRESS/32 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2
Теперь и после перезагрузки все работает как надо.