無法存取本機網路外部/內部的 apache Web 伺服器

無法存取本機網路外部/內部的 apache Web 伺服器

如果我錯誤地使用了任何技術術語,我提前道歉。我還是 Linux/網路新手

我已經嘗試解決這個問題一個多星期了,其他人提出的相關問題都沒有幫助我。我最近建立了一個在 apache2 上運行的網站伺服器來託管我自己的網站。我還打算將它用於 SSH、FTP 和 VNC。我在 GoDaddy 註冊了一個網域 cokongwu.com。已為伺服器設定了靜態 IP (192.168.0.105),並且我還為靜態 IP 的連接埠 80、21、23、53 和 443 設定了連接埠轉送。閱讀有關如何設定可公開訪問的網絡伺服器的指南,我認為這就是所需要的,因為它一開始工作得很好,但是我當然發現,一旦我嘗試使用網絡外部的域名訪問網絡服務器,我無法連接。經過更多搜尋後,我發現我需要將 GoDaddy 的區域文件中的 A 記錄更改為我的公共 IP。一旦我這樣做,我發現我根本無法再連接到我的網頁伺服器,無論是在網路內部(我會被重定向到路由器頁面)還是在網路外部(連接會逾時)。後來我發現,由於我的公共 IP 無法設定為靜態,所以我必須使用一項服務,特別是 dyndns,以便在 IP 發生變化時能夠不斷更新它。我從軟體更新中心設定了 dyndns 更新程序,並設定了我的 dyndns 帳戶 cokongwu.com,其中 A 記錄指向我的公共 IP,別名 www.cokongwu.com 指向 cokongwu.com。我還設定了一個主機名稱 cokongwu.dyndns.org,它也指向我的公共 IP,並將 dyndns 網域伺服器新增到 Godaddy 的網域伺服器中。我在godaddy 的cokongwu.com 的A 記錄仍然指向我的內部ip,而CName 記錄(www 和cokongwu.com)都指向cokongwu.dyndns.org。所以我無法再管理網域的區域文件)

畢竟,嘗試訪問 hostname.com 仍然會遇到與以前相同的問題。訪問它指向我的公共IP而不是我的內部IP,但在網路內我只是轉發到我的路由器設定頁面,而在網路外它只是超時。我不知道如何解決這個問題,所以歡迎任何想法。它(公共IP)不應該被重定向到我的內部IP嗎?

如果我錯誤地使用了這些技術術語,再次抱歉,我對這整件事仍然很陌生。

我知道很多與這篇文章某些命令相關的問題,所以我會做同樣的事情:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5556          0.0.0.0:*               LISTEN      3387/dyn_updater
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2729/vino-server
tcp6       0      0 :::80                   :::*                    LISTEN      -               
tcp6       0      0 :::21                   :::*                    LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
tcp6       0      0 ::1:631                 :::*                    LISTEN      -               
tcp6       0      0 :::5800                 :::*                    LISTEN      2729/vino-server
tcp6       0      0 :::5900                 :::*                    LISTEN      2729/vino-server
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -               
udp        0      0 127.0.1.1:53            0.0.0.0:*                           -               
udp        0      0 0.0.0.0:39124           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:631             0.0.0.0:*                           -               
udp6       0      0 :::5353                 :::*                                -               
udp6       0      0 :::53973                :::*                                -       

烏夫沃:

sudo ufw status
[sudo] password for fender: 
Status: inactive

000-default.conf:

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
        ServerName cokongwu.com
        ServerAlias www.cokongwu.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

答案1

據我了解,您遇到以下問題:

1 - 無法從下列位置存取 Web 伺服器(使用 FQDN,「完全限定網域名稱」www.cokongwu.com)裡面區域網路?
2 - 您無法從下列位置驗證網站的功能外部

1 - 使用 FQDN 從內部存取 Web 伺服器。
我在你的問題中看不到你試圖從哪裡存取網路伺服器,所以我假設它來自區域網路內的一個單獨的客戶端。

由於您很可能使用外部 DNS 伺服器,因此您對 www.cokongwu.com 的請求將解析公開可用的 IP 號碼,即您的網路路由器的外部(請參閱下文)。由於該路由器不會路由傳入的流量到外部IP號碼從裡面回到裡面,交通將在該點停止。

為了讓事情順利進行裡面網路 www.cokongwu.com 必須解析為您的內部的IP 號碼 (192.168.0.105)。您可以嘗試使用內部 IP 號碼瀏覽 Web 伺服器,但由於您打算使用 SSL,最終將要求您使用 FQDN 存取 Web 伺服器,否則您將收到憑證錯誤。

修復內部名稱解析的「困難方法」是設定內部 DNS 伺服器,但上述方法可以解決問題和小規模部署。您似乎對 google 並不陌生,如果您想設定內部 DNS 伺服器,網路上有很多相關指南。

一旦內部名稱解析為您提供了內部 IP 位址,瀏覽 Web 伺服器將給出相同的答复,就好像您是來自外部的客戶端一樣。

2 - 對網路伺服器的外部存取。
解析 www.cokongwu.comdig www.cokongwu.com +noall +answer給了我以下回應。

www.cokongwu.com。 0 IN CNAME cokongwu.com。
共空網。 59 於 69.171.137.28

這表明萬維網host 是指向的 cname(別名)共空網這是 A 記錄。進行反向查找69.171.137.28給出dig -x 69.171.137.28 +short

dsl-69-171-137-28.acanac.net

這看起來像是一個動態主機。如果 dyndns 更新有效,則該位址應該是您目前的公用 IP 位址。在命令列中使用以下命令驗證這一點:

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

(可恥地從這裡) 或瀏覽至www.whatismyip.com

假設這是您目前的,瀏覽到共空網應該從外部工作...

我嘗試過,但沒有成功,這可能意味著以下任何一種或多種情況的組合:

A - dyndns 服務尚未更新您的 IP 位址
B - 外部路由器中的轉送不起作用
C - Web 伺服器沒有回复

使用進行快速測試telnet <ip number> <port number>不會從上面列出的任何連接埠號碼得到回應。這會讓我相信原因應該是 A 或 B。所有連接埠轉送請求。

一些進一步的想法
我注意到你提到端口53作為轉送到 Web 伺服器的連接埠之一。連接埠 53 UDP是傳入的標準DNS 請求。除非你實際上有一個網域名稱伺服器在網路伺服器電腦上運行時,您可以安全地關閉此連接埠...無論如何它不會有任何用途。

我還注意到您提到使用 ssh 和 ftp,但在防火牆中開啟了連接埠 21 和 23 並轉發到 Web 伺服器。連接埠 23 是遠端登入連接埠和連接埠 21 是FTP連接埠。我強烈建議不要使用這些服務,因為它們都是不安全的協議,會傳輸一切以明文形式,包括使用者名稱和密碼。

我建議只打開並轉發埠22在防火牆中。埠22被使用SSH,這是 telnet 的加密替代品。埠22也被使用SCP服務,它使用SSH服務用於檔案傳輸。使用SSHSCP取代 telnet 和 ftp 將確保進出 Web 伺服器的所有流量的安全性。
進一步的建議是對傳入的 ssh 使用不同的端口,最好是超過 1000 的端口號,例如端口 1522(僅是示例)。這是為了避免傳入的 ssh 服務被外部連接埠掃描發現。只需將傳入連接埠從 22 變更為更高的連接埠號碼(即 1522),但仍將其轉送到埠22在網路伺服器上。然後從外部使用高連接埠號碼(1522)存取ssh伺服器,從內部使用連接埠22存取ssh伺服器。

我希望這對您有用並希望您解決您的問題=)

相關內容