如果我使用任何技术术语的方式不正确,我提前道歉。我还是 Linux/网络方面的新手
我已经尝试解决这个问题一个多星期了,其他人提出的相关问题都对我没用。我最近构建了一个运行在 apache2 上的 Web 服务器来托管我自己的网站。我还打算将它用于 SSH、FTP 和 VNC。我在 GoDaddy 注册了一个域名,cokongwu.com。已为服务器设置了静态 IP(192.168.0.105),并且我还为端口 80、21、23、53 和 443 设置了端口转发到静态 IP。阅读有关如何设置可公开访问的 Web 服务器的指南后,我认为这就是所需的全部内容,因为它一开始运行良好,但当然,我发现一旦我尝试使用网络外的域名访问 Web 服务器,我就无法连接。经过进一步搜索,我发现我需要将 GoDaddy 区域文件中的 A 记录更改为我的公共 IP。在我这样做之后,我发现我根本无法再连接到我的网络服务器,无论是在网络内部,我都会被重定向到路由器页面,还是在网络外部,连接会超时。后来我发现,由于我的公共 IP 无法设置为静态,所以我必须使用一项服务,特别是 dyndns,这样它才能在 IP 发生变化时不断更新 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。(但是,自从我用 dyndns 名称服务器替换了 godaddy 的名称服务器后,我就无法再管理该域的区域文件了)
经过所有这些,尝试访问 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 :::* -
ufw:
sudo ufw status
[sudo] password for fender:
Status: inactive
000-默认.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 服务器。
在您的问题中我无法看到您尝试从哪里访问 Web 服务器,因此我假设它是从 LAN 内的单独客户端访问的。
由于您很可能使用外部 DNS 服务器,因此您对 www.cokongwu.com 的请求将解析公开可用的 IP 号码,即您的互联网路由器的外部(见下文)。由于该路由器不会路由来自外部 IP 号码从内部回到里面,交通将从该点停止。
为了使事情顺利进行里面网络,www.cokongwu.com 必须解析为您的内部的IP 号码 (192.168.0.105)。您可以尝试使用内部 IP 号码浏览 Web 服务器,但由于您计划使用 SSL,最终将需要您使用 FQDN 访问 Web 服务器,否则您将收到证书错误。
修复内部名称解析的“困难方法”是设置内部 DNS 服务器,但上述方法可以解决故障排除和小规模部署问题。你似乎对谷歌并不陌生,如果你想设置内部 DNS 服务器,互联网上有很多指南。
一旦内部名称解析为您提供了内部 IP 地址,浏览 Web 服务器将会给出相同的答复,就像您是来自外部的客户端一样。
2-对 Web 服务器的外部访问。
解决 www.cokongwu.com 后,dig www.cokongwu.com +noall +answer
我得到了以下答复。
www.cokongwu.com. 0 IN CNAME cokongwu.com.
cokongwu.com. 59 IN A 69.171.137.28
这表明万维网host 是指向共空武这是一条 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
假设您当前正在浏览www.cokongwu.com应该从外部工作......
我尝试过,但没有效果,这可能意味着以下任一原因或其组合:
A - dyndns 服务尚未更新您的 IP 地址
B - 外部路由器的转发功能不起作用
C - Web 服务器没有回复
使用进行快速测试,telnet <ip number> <port number>
上面列出的任何端口号均未给出任何回复。这让我相信原因应该是 A 或 B。如果是 B,可能是您没有正确进行端口转发,或者如果您将路由器与调制解调器一起使用,则您没有正确将调制解调器桥接到路由器以允许其处理所有端口转发请求。
一些进一步的想法
我注意到你提到端口 53作为转发到 Web 服务器的端口之一。端口 53 UDP是传入的标准DNS 请求除非你真的有一个DNS 服务器在 Web 服务器机器上运行时,您可以安全地关闭此端口...无论如何它都没有任何用途。
我还注意到您提到使用 ssh 和 ftp,但在防火墙中打开了端口 21 和 23,并转发到 Web 服务器。端口 23 是远程登录端口和端口 21 是FTP 端口。我强烈建议不要使用这两种服务,因为它们都是不安全的协议,会传输一切以明文形式,包括用户名和密码。
我建议只打开和转发端口 22在防火墙中。端口 22由使用远程控制,这是 telnet 的加密替代品。端口 22还被SCP服务,使用ssh 服务用于文件传输。使用远程控制和SCP而不是 telnet 和 ftp 将保证您往返于 Web 服务器的所有流量的安全。
进一步的建议是使用不同的端口进行传入 ssh,最好是大于 1000 的端口号,如端口 1522(仅作为示例)。这是为了避免传入 ssh 服务被外部端口扫描发现。只需将传入端口从 22 更改为更高的端口号(即 1522),但仍将其转发到端口 22在 Web 服务器上。然后从外部使用高端口号 (1522) 访问 ssh 服务器,从内部使用端口 22 访问。
我希望这对你有用,并希望你能解决你的问题=)