如果我錯誤地使用了任何技術術語,我提前道歉。我還是 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服務用於檔案傳輸。使用SSH和SCP取代 telnet 和 ftp 將確保進出 Web 伺服器的所有流量的安全性。
進一步的建議是對傳入的 ssh 使用不同的端口,最好是超過 1000 的端口號,例如端口 1522(僅是示例)。這是為了避免傳入的 ssh 服務被外部連接埠掃描發現。只需將傳入連接埠從 22 變更為更高的連接埠號碼(即 1522),但仍將其轉送到埠22在網路伺服器上。然後從外部使用高連接埠號碼(1522)存取ssh伺服器,從內部使用連接埠22存取ssh伺服器。
我希望這對您有用並希望您解決您的問題=)