Переадресация портов на локальный сервер

Я хочу иметь доступ к серверу, который работает на моем локальном компьютере через Интернет. Я настроил переадресацию портов на моем маршрутизаторе:

Public Port Range: 80-80
Target IP Address: 192.168.0.4
Target Port Range: 80-80

Я проверил, открыты ли порты, с помощью http://www.yougetsignal.com/tools/open-ports/ , в котором говорится: Порт 80 открыт на ...

Я попробовал это и с сервером Apache, а также с сервером nodeJS на порту 3000, но у меня никогда не было доступа к серверу.

Я проверил, прослушивает ли моя машина эти порты с выходом netstat

netstat -ltn | grep 80

:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

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

Если это поможет, это конфигурация Apache.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName lebensmittel-schulung.local

    DocumentRoot /home/dominic/workspace/lebensmittel-schulung/public
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dominic/workspace/lebensmittel-schulung/public>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
    </Directory>


    # Redirect www to non-www
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1$1 [L,R=301]

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Также был выполнен сброс настроек и перезагрузка моего маршрутизатора, чтобы избежать неправильной конфигурации

iptables до:

Chain INPUT (policy ACCEPT 1330K packets, 1422M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

iptables после открытия порта 80 вручную

Chain INPUT (policy ACCEPT 68 packets, 9825 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Это вывод tcpdump после выполнения запроса к моему общедоступному ip с того же компьютера, на котором работает сервер, хотя открытие порта 80 ничего не меняет. Я думаю, что это исходящий запрос, который перехватывается tcpdump

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:46:42.402748 IP 192.168.0.4.34870 > chello080108157035.6.12.vie.surfer.at.http: Flags [S], seq 2878976956, win 29200, options [mss 1460,sackOK,TS val 4294937394 ecr 0,nop,wscale 7], length 0
21:46:42.405078 IP chello080108157035.6.12.vie.surfer.at.http > 192.168.0.4.34870: Flags [R.], seq 0, ack 2878976957, win 0, length 0
21:46:43.473378 IP 192.168.0.4.34871 > chello080108157035.6.12.vie.surfer.at.http: Flags [S], seq 1711479299, win 29200, options [mss 1460,sackOK,TS val 4294937661 ecr 0,nop,wscale 7], length 0
21:46:43.473897 IP 192.168.0.4.34872 > chello080108157035.6.12.vie.surfer.at.http: Flags [S], seq 2157458117, win 29200, options [mss 1460,sackOK,TS val 4294937662 ecr 0,nop,wscale 7], length 0
21:46:43.475335 IP chello080108157035.6.12.vie.surfer.at.http > 192.168.0.4.34871: Flags [R.], seq 0, ack 1711479300, win 0, length 0
21:46:43.476463 IP chello080108157035.6.12.vie.surfer.at.http > 192.168.0.4.34872: Flags [R.], seq 0, ack 2157458118, win 0, length 0
1
задан 14 May 2015 в 23:11

1 ответ

Предполагая, что конфигурация перенаправления портов на Вашем маршрутизаторе корректна, необходимо гарантировать несколько вещей:

  • Машина 192.168.0.4 имеет рабочий веб-сервер (хорошо).
  • Это слушает или на 192.168.0.4:80 или на 0.0.0.0:80 (хорошо).
  • Брандмауэр, который мог бы работать на нем, позволяет входящие соединения на порте, 80/tcp (НЕИЗВЕСТНЫЙ).

Относительно последней точки - я не уверен, каковы Ваши правила iptables. Отправьте вывод

sudo iptables -vL INPUT -n

Если входящие соединения на 80/tcp действительно позволяются, но так или иначе Вы не можете получить доступ к своему веб-серверу от за пределами сети, Вы могли бы хотеть войти в веб-сервер и использовать tcpdump для получения входящего трафика, чтобы видеть, достигают ли какие-либо попытки подключения его.

Использование:

export ext_if=$(ip ro | awk '/^default via/ {print $5}')
sudo tcpdump -i ${ext_if} port 80

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

Если брандмауэр на Вашей машине не позволяет входящим соединениям достигать порта, 80/tcp, фиксирует это путем выполнения команды ниже и проверяет:

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

ОБНОВЛЕНИЕ: Вы также упомянули:

Это - вывод tcpdump после выполнения запроса к моему общедоступному IP от той же машины, на которой работает сервер

Это, вероятно, не будет работать. Путь Ваши взятия запроса:

192.168.0.4 =>
<public_ip> (doing source and destination NAT, aka port forwarding) =>
192.168.0.4

Как Вы видите в выводе tcpdump, существует 3 Запроса HTTP, инициируемые любым инструментом, Вы раньше открывали соединение с Вашим веб-сервером, маршрутизатор отклоняет все соединения путем отвечания пакетами с RST ("сброс", т.е. "уходят, закрывают соединение"), набор флага.

Насколько я знаю, много устройств, обеспечивающих NAT, не позволят Вам инициировать запрос из сети позади NAT к ее общедоступному IP-адресу и затем обратно к хосту позади того же NAT посредством перенаправления портов (целевой NAT).

Необходимо попытаться выполнить запрос от за пределами сети. Если у Вас нет внешнего хоста, где можно войти в систему и использовать т.е. wget/curl, чтобы выполнить запрос попробовать некоторые из многих веб-инструментов, чтобы сделать это, такие как http://www.infobyip.com/httpservertest.php

Если это будет работать, и Вы получаете результат, который содержит, по крайней мере, код состояния Запроса HTTP (т.е. 200, 302, 404, и т.д.) и некоторые заголовки ответа, такие как Сервер, Тип контента, то это подтвердит что:

  • Ваш общедоступный IP доступен снаружи
  • передающие работы настроенного порта
  • сервер в Вашей сети действительно получает запрос и отвечает на него.

Если Вы хотите смочь получить доступ к своему веб-серверу с помощью его общедоступного IP из той же сети, Вы могли бы также:

  • добавьте соответствующую запись в свой/etc/hosts файл, указав на доменное имя сервера на частный адрес Вашего веб-сервера (временный взлом).
  • выполните так называемый сервер DNS разделения (предпочтенный, но не стоящий того, если это только для себя),
  • реконфигурируйте свой маршрутизатор для разрешения таких соединений. Это может быть сделано, но маловероятно, что Ваш домашний маршрутизатор (если это - то, что Вы имеете) сможет сделать это.
2
ответ дан 14 May 2015 в 23:11

Другие вопросы по тегам:

Похожие вопросы: