web-dev-qa-db-ja.com

ローカルサーバーへのポート転送

インターネット経由でローカルマシンで実行されているサーバーにアクセスできるようにしたい。ルーターでポート転送を設定します。

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
1
Dominic Bartl

ルーターのポート転送構成が正しいと仮定して、いくつかのことを確認する必要があります。

  • マシン192.168.0.4には実行中のWebサーバーがあります(OK)。
  • 192.168.0.4:80または0.0.0.0:80(OK)でリッスンしています。
  • ファイアウォールで実行されている可能性のあるファイアウォールは、ポート80/tcp(UNKNOWN)での着信接続を許可します。

最後の点に関して-あなたの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は外部からアクセスできます
  • 設定されたポート転送が機能する
  • ネットワーク上のサーバーは実際にリクエストを受信し、それに応答します。

同じネットワーク内からパブリックIPを使用してWebサーバーにアクセスできるようにするには、次のいずれかを実行します。

  • / etc/hostsファイルに適切なエントリを追加して、サーバーのドメイン名をWebサーバーのプライベートアドレスに向けます(一時的なハック)。
  • いわゆるsplit-dnsサーバーを実行します(推奨されますが、自分用だけの場合は価値がありません)
  • そのような接続を許可するようにルーターを再構成します。これは実行できますが、ホームルーター(使用している場合)で実行できるとは考えられません。
2
Marcin Kaminski