外部からHTTPポートにアクセスするには、サーバーのVPNをバイパスしてください。

外部からHTTPポートにアクセスするには、サーバーのVPNをバイパスしてください。

私はFreeBSD 12.1とopenvpnを使ってホームサーバーを運営しています。 openvpn はサーバー上でのみ実行されます。残りのホームネットワークはopenvpnではありません。

私はWebサーバーの初心者で、lighttpdを介して前後に見て、その容量のサーバーを使用しています。ポート8080のWebサーバーを設定し(私のISPは80をオフにします)、着信ポート8080をサーバー8080に転送するようにDD-WRTルーターを設定しました。

私が望むのは、私のサーバーがVPNサーバーと非VPNネットワークサーバーの二重の役割を果たすことです。

しかし、私が望む目標であるルーターの外部IP(「:8080」を追加)を介してWebサーバーにアクセスすることは、openvpnを停止した場合にのみ機能します。 VPN IP(「:8080」を追加)を使用すると、オーブンvpnを使用してWebサーバーにアクセスできますが、サーバーまたはopenvpnを再起動するとIPが常に変更されるため、これは実用的ではありません。

私のrc.confには次のものがあります。

firewall_enable=yes
firewall_nat_enable=yes
gateway_enable=yes

(最後の2つが必要かどうかわからない)

私のipfwルールは非常に基本的です。 openvpnが停止すると、デフォルトで急流とNZBトラフィックの「キルスイッチ」になるように設定しました。

00001 allow ip from any to any via lo0
00010 allow ip from any to any via tun0
00101 allow ip from me to 192.168.1.0/24 uid transmission
00102 allow ip from 192.168.1.0/24 to me uid transmission
00103 deny ip from any to any uid transmission
00104 allow ip from me to 192.168.1.0/24 uid sabnzbd
00105 allow ip from 192.168.1.0/24 to me uid sabnzbd
00106 deny ip from any to any uid sabnzbd

これは私のifconfigです。

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
        ether xx:xx:xx:xx:xx:xx
        inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 fe80::xxxx:xxxx:xxxx:xxxx%tun0 prefixlen 64 scopeid 0x3
        inet xx.xxx.xx.xx --> xx.xxx.xx.xx netmask 0xffffffe0
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 4074

これを行う方法はありますか?それとも別のWebサーバーを持っている必要がありますか?


フォローするクラウスアンデルセンの指示段階的に進むが、最終的には成功しない。

ファイアウォールとVPNを停止します。いいね
ポート8080のlocalhostがWebサーバーに接続できることを確認してください。成功
次に、同じサブネット上の他のシステムで。成功
最後にインターネットで。成功  (承認済みhttps://validator.w3.org/)

IPをネットワークサーバーにバインドする方法は?
ローカルアドレス(192.168.1.250:8080)を介して内部でアクセスするか、ルーターのパブリックアドレス(64.67.136.70:8080)を介して外部および内部でアクセスできます。

次のステップはファイアウォールを有効にすることです。
元の投稿の設定を使用してファイアウォールを有効にしました。すべての接続はまだ良好です。

最後に、VPNを有効にします。
元のファイアウォール設定を使用して有効にしており、外部パブリックアドレス(まだ内部から接続可能)を除いて、すべての接続は正常です。 VPNアドレス(178.73.218.69:8080)を介して外部に接続することもできます。

次に、提案したファイアウォールルールを追加しました。(「00100 em0を介して任意の8080でtcpを許可します」)ファイアウォールを再起動します。接続に変更はありません。

私が変更していないifconfigは次のようになります。

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=81049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER>
        ether 34:17:eb:d1:30:df
        inet 192.168.1.250 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 fe80::3617:ebff:fed1:30df%tun0 prefixlen 64 scopeid 0x3
        inet 178.73.218.69 --> 178.73.218.65 netmask 0xffffffe0
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 4056

VPNと最新のファイアウォールを使用した「netstat -4rn」の出力は次のとおりです。

Destination        Gateway            Flags     Netif Expire
0.0.0.0/1          178.73.218.65      UGS        tun0
default            192.168.1.1        UGS         em0
127.0.0.1          link#2             UH          lo0
128.0.0.0/1        178.73.218.65      UGS        tun0
178.73.195.104/32  192.168.1.1        UGS         em0
178.73.218.64/27   178.73.218.65      UGS        tun0
178.73.218.65      link#3             UH         tun0
178.73.218.69      link#3             UHS         lo0
192.168.1.0/24     link#1             U           em0
192.168.1.250      link#1             UHS         lo0

追加のアドバイスをいただきありがとうございます。

ベストアンサー1

はい - 動作します。しかし、完全に答えるのに十分な情報を提供しなかったし、いくつかの内容を修正してくれましたが、これも役に立ちそうです。

長すぎます。簡素化と検証

「複雑な」ネットワーク設定があります。つまり、パブリックネットワークセグメントがありますが、em0VPNネットワークセグメントがオンになっていますtun0。これらはすべて正常ですが、それらの間をルーティングする方法を理解する必要があります。たぶん、トラフィックはem0引き続きルーティングされますtun0。これにより、インターネットからのhttpクライアントトラフィックがサーバーに転送される可能性があります。ただし、サーバーがtun0すべての戻りトラフィックをhttpクライアントを介してルーティングしている場合、何も応答しません。

これを確認するには、ルーティングテーブルを表示して理解する必要があります。確認してくださいnetstat -4rn

しかし、あなたが提供した情報のいくつかでもipfw設定を見なければならないようです。表示される一連の規則は、次のように要約されます。

Rule 1:       Allow everything on lo0
Rule 10:      Allow everything on tun0
Rule 101-103: Transmission related
Rule 104-106: sabnzbd related

私の質問は:DD-WRTルーターがポート8080からポート8080のサーバーにパケットを転送する場合、パケットに何が起こると予想しますか?

ファイアウォールにはこの状況を処理するための規則はありません。その後、ファイアウォールはそのパケットをドロップしたいと思います。私がpf直接使うので、使い方を100%確信することはできませんが、ipfw次のようになります。

00100 allow tcp from any to any 8080 in via em0

これがうまくいくany to anyと縮小することができ、それに基づいて進むことをany to me選択できます。uid

しかし、openvpnが実行されていないときに動作すると言われました。ポート8080へのトラフィックを許可するための別の規則がないため、ファイアウォールが誤って設定され、すべてのトラフィックを許可すると予想される可能性があります。

しかし、そうです。これらの設定は機能します。ただし、動く部分が多いです。私はこれをこのようにデバッグします。

  1. ファイアウォールとVPNを停止します。ポート8080のlocalhostがWebサーバーに接続できることを確認してください。次に、同じサブネット上の別のコンピュータからWebサーバーに接続します。最後にインターネットで。これは、Web サーバーが正しく構成および動作していることを確認する最初のステップです。 VPNでテストしたので、設定が機能する可能性が高くなります。それでは、ネットワークサーバーはどのようにIPをバインドしますか? 「*」、「localhost」、ローカルアドレス、またはパブリックアドレスを使用します。

  2. 次のステップはファイアウォールを有効にすることです。ファイアウォールを有効にした後、ルールが期待どおりに機能していることを確認できます。私の考えでは、あなたの出来事の問題はここにあると思います。

  3. 最後に、VPNを有効にします。これは興味深いルーティングの問題を引き起こす可能性があります。 Webサーバーに接続できない場合は、ルーティングを確認する必要があります。これが私たちが集中し始めるところですnetstart -4rn

したがって、できるだけ少ない可動部品を使用して各ステップを完全にテストし、一度に1ステップずつ前進します。

おすすめ記事