인터넷을 통해 내 로컬 컴퓨터에서 실행중인 서버에 액세스하고 싶습니다. 라우터에서 포트 포워딩을 설정했습니다.
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이 열려 있습니다 ...
포트 3000의 nodeJS 서버와 함께 Apache 서버와 함께 시도했지만 서버에 액세스 할 수 없습니다.
내 컴퓨터가 해당 포트에서 수신하는지 확인했습니다. 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
포트 80을 수동으로 연 후 iptables
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
이것은 포트 80을 열어도 아무것도 변경되지 않지만 서버가 실행되는 동일한 컴퓨터에서 내 공용 IP에 요청한 후 tcpdump 출력입니다. 이것은 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
라우터의 포트 전달 구성이 올바르다 고 가정하면 몇 가지 사항을 확인해야합니다.
마지막 요점과 관련하여-귀하의 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
업데이트 : 당신은 또한 언급 :
이것은 서버가 실행되는 동일한 시스템에서 내 공개 IP에 요청한 후 tcpdump 출력입니다.
이것은 작동하지 않을 것입니다. 요청 경로는 다음과 같습니다.
192.168.0.4 =>
<public_ip> (doing source and destination NAT, aka port forwarding) =>
192.168.0.4
tcpdump 출력에서 볼 수 있듯이 웹 서버에 대한 연결을 여는 데 사용한 도구에 의해 시작된 3 개의 HTTP 요청이 있습니다. 라우터는 RST를 사용하여 패킷으로 응답하여 모든 연결을 거부합니다 ( "reset", 즉 "go away, 연결 닫기 ") 플래그 세트.
내가 아는 한, NAT를 제공하는 많은 장치는 NAT 뒤의 네트워크 내에서 공용 IP 주소로 요청을 시작한 다음 포트 전달 (대상 NAT)을 통해 동일한 NAT 뒤의 호스트로 다시 요청하는 것을 허용하지 않습니다.
네트워크 외부에서 요청을 시도해야합니다. 로그인 할 수있는 외부 호스트가없는 경우 (예 : wget / curl을 사용하여 요청) http://www.infobyip.com/httpservertest 와 같은 여러 웹 기반 도구 중 일부를 사용해보십시오 . PHP
이것이 작동하고 최소한 HTTP 요청 상태 코드 (예 : 200, 302, 404 등)와 일부 응답 헤더 (예 : Server, Content-Type)가 포함 된 결과가 표시되면 다음을 확인합니다.
동일한 네트워크 내에서 공용 IP를 사용하여 웹 서버에 액세스 할 수 있도록하려면 다음 중 하나를 수행 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다