インターネット経由でローカルマシンで実行されているサーバーにアクセスできるようにしたい。ルーターでポート転送を設定します。
Public Port Range: 80-80
Target IP Address: 192.168.0.4
Target Port Range: 80-80
http://www.yougetsignal.com/tools/open-ports/ でポートが開いているかどうかを確認しました。
ポート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
これは、サーバーが実行されているのと同じマシンからパブリックIPに要求を行った後のtcpdump出力です。ただし、ポート80を開いても何も変わりません。これは、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での着信接続は実際に許可されているが、どういうわけかネットワークの外部からWebサーバーにアクセスできない場合は、Webサーバーにログインし、tcpdumpを使用して着信トラフィックをキャプチャし、接続の試行がそれに達する。
つかいます:
export ext_if=$(ip ro | awk '/^default via/ {print $5}')
Sudo tcpdump -i ${ext_if} port 80
ネットワークの外部からWebサーバーに接続しようとしても接続が表示されない場合は、まずそれを修正する必要があります。
マシンのファイアウォールが着信接続がポート80/tcpに到達することを許可しない場合、以下のコマンドを実行してこれを修正し、確認します。
Sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
UPDATE:あなたも言及しました:
これは、サーバーが実行されているのと同じマシンからパブリックIPに要求を行った後のtcpdump出力です
これは機能しない可能性があります。リクエストのパスは次のとおりです。
192.168.0.4 =>
<public_ip> (doing source and destination NAT, aka port forwarding) =>
192.168.0.4
Tcpdumpの出力を見るとわかるように、Webサーバーへの接続を開くために使用したツールによって開始された3つのHTTP要求があり、ルーターはRSTでパケットに応答することですべての接続を拒否します接続を閉じる」)フラグを設定します。
私の知る限り、NATを提供する多くのデバイスでは、NATの背後にあるネットワーク内からパブリックIPアドレスへのリクエストを開始できません。ポート転送(宛先NAT)によるNAT。
ネットワークの外部からリクエストを作成してみてください。ログインして、たとえばwget/curlを使用してリクエストを行うことができる外部ホストがない場合は、 http://www.infobyip。 com/httpservertest.php
これが機能し、少なくともHTTPリクエストステータスコード(つまり、200、302、404など)と、Server、Content-Typeなどのいくつかの応答ヘッダーを含む結果が得られた場合、次のことを確認します。
同じネットワーク内からパブリックIPを使用してWebサーバーにアクセスできるようにするには、次のいずれかを実行します。