로컬 네트워크 외부/내부에서 Apache 웹 서버에 액세스할 수 없습니다.

로컬 네트워크 외부/내부에서 Apache 웹 서버에 액세스할 수 없습니다.

기술적인 용어를 잘못된 방식으로 사용한 경우 미리 사과드립니다. 저는 아직 Linux/네트워킹의 초보자입니다.

저는 일주일 넘게 이 문제를 해결하려고 노력했지만 다른 사람들이 묻는 관련 질문 중 어느 것도 도움이 되지 않았습니다. 나는 최근에 내 웹사이트를 호스팅하기 위해 apache2에서 실행되는 웹서버를 구축했습니다. SSH, FTP, VNC에도 사용하려고 했습니다. GoDaddy, cokongwu.com에 도메인을 등록했습니다. 서버에 고정 IP(192.168.0.105)가 설정되었으며 포트 80, 21, 23, 53 및 443에 대한 포트 전달도 고정 IP로 설정했습니다. 공개적으로 액세스 가능한 웹 서버를 설정하는 방법에 대한 가이드를 읽고 처음에는 완벽하게 작동했기 때문에 이것이 필요한 전부라고 생각했지만 물론 네트워크 외부의 도메인 이름을 사용하여 웹 서버에 액세스하려고 시도한 후에는 알게 되었습니다. , 연결할 수 없습니다. 좀 더 검색한 결과 GoDaddy의 영역 파일에 있는 A 레코드를 공개 IP로 변경해야 한다는 사실을 알게 되었습니다. 그런 다음 네트워크 내부에서 라우터 페이지로 리디렉션되거나 연결 시간이 초과되는 네트워크 외부에서 더 이상 웹 서버에 연결할 수 없다는 사실을 발견했습니다. 나는 나중에 내 공개 IP를 정적으로 설정할 수 없기 때문에 IP가 변경될 때 지속적으로 업데이트할 수 있도록 서비스, 특히 dyndns를 사용해야 한다는 것을 알게 되었습니다. 소프트웨어 업데이트 센터에서 dyndns 업데이터를 설정하고 내 공개 IP를 가리키는 A 레코드와 cokongwu.com을 가리키는 별칭 www.cokongwu.com을 사용하여 내 dyndns 계정 cokongwu.com을 설정했습니다. 또한 내 공개 IP를 가리키는 호스트 이름 cokongwu.dyndns.org를 설정하고 dyndns 네임서버를 Godaddy의 네임서버에 추가했습니다. godaddy에 있는 cokongwu.com에 대한 A 레코드는 여전히 내 내부 IP를 가리키고 CName 레코드(www 및 cokongwu.com)는 모두 cokongwu.dyndns.org를 가리킵니다.(그러나 godaddys 네임서버를 dyndns 네임서버로 교체했기 때문에 더 이상 도메인의 영역 파일을 관리할 수 없습니다)

결국, 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 - 웹 서버(FQDN, "정규화된 도메인 이름" www.cokongwu.com 사용)에 액세스할 수 없습니다.내부에LAN?
2 - 웹사이트의 기능을 확인할 수 없습니다.밖의?

1 - FQDN을 사용하여 내부에서 웹 서버에 액세스합니다.
귀하의 질문에서 웹 서버에 액세스하려는 위치를 알 수 없으므로 LAN 내부의 별도 클라이언트에서 온 것으로 가정하겠습니다.

외부 DNS 서버를 사용할 가능성이 높으므로 www.cokongwu.com에 대한 요청은 공개적으로 사용 가능한 IP 번호, 즉 인터넷 라우터 외부를 의미합니다(아래 참조). 해당 라우터는 들어오는 트래픽을 라우팅하지 않으므로외부 IP 번호로내부에서다시 안쪽으로, 해당 지점에서 교통이 정지됩니다.

일이 잘 되려면내부에네트워크 www.cokongwu.com이 귀하의 네트워크로 확인되어야 합니다.내부IP 번호(192.168.0.105). 내부 IP 번호를 사용하여 웹 서버 탐색을 시도할 수 있지만 SSL을 사용할 계획이므로 결국 FQDN을 사용하여 웹 서버에 액세스해야 하며 그렇지 않으면 인증서 오류가 발생합니다.

내부 이름 확인을 수정하는 "어려운 방법"은 내부 DNS 서버를 설정하는 것이지만 위의 방법은 문제 해결 및 소규모 배포에 효과적입니다. 귀하는 Google에 익숙하지 않은 것 같습니다. 내부 DNS 서버를 설정하려는 경우 인터넷에 이에 대한 많은 가이드가 있습니다.

내부 이름 확인을 통해 내부 IP 주소가 제공되면 웹 서버를 탐색하면 외부에서 오는 클라이언트인 것처럼 동일한 응답이 제공됩니다.

2 - 웹 서버에 대한 외부 액세스.
www.cokongwu.com을 해결하면 dig www.cokongwu.com +noall +answer다음과 같은 답변을 받았습니다.

www.cokongwu.com. 0 CNAME cokongwu.com.
cokongwu.com. 59 IN A 69.171.137.28

이는 다음을 보여줍니다.www호스트는 다음을 가리키는 cname(별칭)입니다.cokongwu.comA-레코드예요. 역방향 조회 수행 중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 - 웹 서버가 응답하지 않습니다.

을 사용하여 빠른 테스트를 수행하면 telnet <ip number> <port number>위에 나열된 포트 번호에서 응답이 없습니다. 이로 인해 그 이유는 A 또는 B여야 한다고 믿게 됩니다. B인 경우 포트 전달을 올바르게 수행하지 않았거나 모뎀과 함께 라우터를 사용하는 경우 브리지를 제대로 연결하지 않았기 때문일 수 있습니다. 모든 포트 전달 요청을 처리할 수 있도록 라우터에 모뎀을 연결합니다.

몇 가지 추가 생각
나는 당신이 언급한 것을 알아차렸습니다포트 53웹 서버로 전달되는 포트 중 하나로 사용됩니다.포트 53 UDP들어오는 기준이다DNS 요청. 실제로 가지고 있지 않는 이상DNS 서버웹 서버 시스템에서 실행 중인 경우 이 포트를 안전하게 닫을 수 있습니다. 어쨌든 어떤 용도로도 사용되지 않습니다.

또한 ssh 및 ftp 사용에 대해 언급했지만 방화벽에서 포트 21 및 23을 열고 웹 서버로 전달했다는 내용도 확인했습니다. 포트 23은텔넷포트이고 포트 21은FTP 포트. 이 서비스 중 어느 것도 사용하지 않는 것이 좋습니다. 둘 다 전송을 전송하는 안전하지 않은 프로토콜이기 때문입니다.모든 것사용자 이름과 비밀번호를 포함한 일반 텍스트로.

열기 및 전달만 권장합니다포트 22방화벽에서.포트 22에 의해 사용됩니다SSH, 이는 텔넷을 암호화하여 대체한 것입니다.포트 22에 의해서도 사용됩니다.scp을 사용하는 서비스SSH 서비스파일 전송용. 사용SSH그리고scp텔넷과 FTP 대신 웹 서버와 주고받는 모든 트래픽을 안전하게 유지합니다.
추가 권장 사항은 수신 SSH에 대해 다른 포트를 사용하는 것입니다. 포트 1522와 같이 1000보다 큰 포트 번호를 사용하는 것이 좋습니다(단지 예). 이는 들어오는 SSH 서비스가 외부 포트 스캔에 의해 발견되는 것을 방지하기 위한 것입니다. 수신 포트를 22에서 더 높은 포트 번호(예: 1522)로 변경하기만 하면 됩니다.포트 22웹 서버에서. 그런 다음 외부에서는 높은 포트 번호(1522)를 사용하고 내부에서는 포트 22를 사용하여 SSH 서버에 액세스합니다.

이것이 귀하에게 도움이 되기를 바라며 문제가 해결되기를 바랍니다 =)

관련 정보