質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iptables

iptablesは、一般的なLinuxに備わっているパケットフィルタリング型のファイアウォール機能。パケットフィルタリングルールおよびネットワークアドレス変換ルールを適用することが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

1回答

1326閲覧

[Linux]iptablesを使用して、LinuxサーバーのIPアドレスから別のLinuxサーバーに転送したい

sabx

総合スコア200

iptables

iptablesは、一般的なLinuxに備わっているパケットフィルタリング型のファイアウォール機能。パケットフィルタリングルールおよびネットワークアドレス変換ルールを適用することが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

3クリップ

投稿2019/03/23 16:17

編集2022/01/12 10:55

前提・実現したいこと

同じレンタルサーバー会社で管理されている、LinuxサーバーAのiptablesの設定により、LinuxサーバーAへのアクセスをLinuxサーバーB(Apach HTTPインストール済み)にアクセスするように転送処理?のようなものを実装したい。
また、LinuxサーバーAにはVPNサーバーがインストールされていて、PC -> LinuxサーバーAにはプライベートIPでアクセス可能。

環境構成

PC -> サーバーA(VPN) -> サーバーB(WEB)

実施したこと

参考サイトをもとに、下のコマンドをLinuxサーバー上で実行。

iptables -t nat -A PREROUTING -d AAA.AAA.AAA.AAA -j DNAT --to BBB.BBB.BBB.BBB iptables -t nat -A POSTROUTING -d BBB.BBB.BBB.BBB -j SNAT --to AAA.AAA.AAA.AAA

補足: AAA.AAA.AAA.AAAはサーバーAのeth1に割り振らているプライベートIPアドレスで、BBB.BBB.BBB.BBBはサーバーBのグローバルIPアドレス

困っていること

上記記載の参考サイト通りに実施したのですが、うまく設定が反映されていないためか(or 技術的に難しいのか)サーバーAにアクセスしてもサーバーBのWEB画面を閲覧することができません。

こういった場合に、まずどうやって原因の切り分けを実施していけばいいのか教えていただきたいです。

追記

表示されるエラー

WEBブラウザからサーバーBにアクセスしようとすると、「このサイトにアクセスできません」と表示されます。
(サーバーの応答時間が長すぎるためアクセスできない状態です)

また、サーバーBのグローバルIPアドレスをWEBブラウザに入力すると、WEB画面が正常に表示されます。

ネットワーク構成

登場人物であるPC、サーバーA(VPN)、サーバーB(WEB)のネットワーク構成を下にまとめます。

  • PC
NICIPアドレス備考
VPN用仮想NIC192.168.0.2/24下のサーバーAのlocal_tapと疎通可
  • サーバーA(VPN)
NICIPアドレス備考
eth010.0.0.1/8グローバルIPはxxx.xxx.xxx.xxx
VPN用仮想NIC(local_tap)192.168.0.30/24
  • サーバーB(WEB)
NICIPアドレス備考
eth0172.16.0.1/16グローバルIPはyyy.yyy.yyy.yyy

PC -> サーバーA(local_tap)にアクセスした際に、サーバーBのグローバルIPであるyyy.yyy.yyy.yyyにアクセスするようにしたいと思っています。
(PCからサーバーBのWEB画面をWEBブラウザから確認したいです)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2019/03/23 23:44

「サーバーAにアクセスしてもサーバーBのWEB画面を閲覧することができません。」という点ですが、具体的にどのようなエラーメッセージが表示されるのでしょうか。
sabx

2019/03/24 03:06

コメントありがとうございます。 先程質問文の追記項目にエラーメッセージを追加しました。 すいませんが、ご確認していただけたら嬉しいです。
wwbQzhMkhhgEmhU

2019/03/24 07:10

そもそも現状のネットワーク構成がよくわからないので、IP持ってる人のIPを全部書いて欲しいです。 例) 【現状】 ホストA(enp0s1): グローバルアドレス(XXX.XXX.1.1/16) ホストA(VPN用tun1): プライベートアドレス(192.168.1.1/24) ホストB(enp0s1): グローバルアドレス(XXX.XXX.0.1/16) PC側ルータ: グローバルアドレス(動的/24) PC(NICアダプタ): プライベートアドレス(192.168.0.1/24) PC(VPNアダプタ): プライベートアドレス(192.168.1.2/24) 上記のように現状を書いた上で、さらに、実現したいネットワーク構成も分けて同様に書いて欲しいです。
sabx

2019/03/24 08:16

コメントありがとうございます。 ネットワーク構成に関して、質問に追記させていただきました。 もしまだ不明な点など有りましたらコメントしていただけたら嬉しいです。
wwbQzhMkhhgEmhU

2019/03/24 09:27

AやBがグローバルIPを持っているわけではないのですね。 BがグローバルIPでアクセス可能であるにも関わらず、PCからAにアクセスすることにしたいのは何故ですか? BのプライベートIPにAからアクセスすることは可能ですか? またPCはVPN経由でBのプライベートIPにアクセスすることは可能ですか?
sabx

2019/03/25 04:38 編集

コメントありがとうございます。 > AやBがグローバルIPを持っているわけではないのですね。 おっしゃるとおりだと思います。サーバーA、B両方共VPSなので、VPSベンダー管理のルーターにグローバルIPが割り振られていて、サーバーA、BにはNATされていると思います。 (ネットワークの知識に自信がないのでトンチンカンなこと言っていたらすいません・・) > BがグローバルIPでアクセス可能であるにも関わらず、PCからAにアクセスすることにしたいのは何故ですか? →社内規約により、PCで閲覧する社内サービスはすべてプライベートIPでアクセスできるようにしようと話になったのがきっかけです。 ただ、現状WEBとして稼働しているサービスに影響は出したくないので、VPNをインストールしたLinuxをルーターのように使用し、プライベートIPでアクセスできるようにしようといった形です。。 > BのプライベートIPにAからアクセスすることは可能ですか? →こちらは出来ないですね。ネットワークが異なるため出来ないと思います。 > またPCはVPN経由でBのプライベートIPにアクセスすることは可能ですか? →こちらも出来ないです。VPN疎通ができるのは、PC -> サーバーAのみとなっています。
wwbQzhMkhhgEmhU

2019/03/24 14:26

だとすると、ホストBをホストAのVPNに参加させたら解決したりしませんか? 負荷はかかってしまいますが、Web以外でも使えるでしょうし、インターネット経由で転送するなら暗号化もせずにというのは心配です。
sabx

2019/03/25 04:41

おっしゃるとおりですね。 また、別案にはなりますが、サーバーA、Bは両方共ConoHaというVPS上に存在しているので、 ConoHa提供のサービスで、VPSを同じネットワーク内に同居することができるので、その機能を使用してプライベートIPでアクセスするようにしたいと思いました。
wwbQzhMkhhgEmhU

2019/03/25 04:57

了解です。すでに回答もあるようなので、後はそちらにお任せします。
guest

回答1

0

DNAT でサーバーB にパケットを転送することは出来ますが、サーバーB に届くパケットの送信元IPアドレスは PC ですので、サーバーB からの戻りパケットは PC の IPアドレス宛に送ろうとします。
このとき、戻りパケットがサーバーA を経由しないと DNAT の逆ができず、正しく通信できません。

サーバーB のルーティング設定で、PC のネットワークセグメント宛(AAA.AAA.AAA.AAA のネットワーク宛)をサーバーA にすれば可能かもしれませんが、サーバーA にリバースプロキシーを導入した方が簡単ではないでしょうか。

(2019/03/24 20:53) 追記

サーバーB のルーティング設定で、PC のネットワークセグメント宛(AAA.AAA.AAA.AAA のネットワーク宛)をサーバーA にすれば可能かもしれませんが、

サーバーA の eth0 とサーバーB の eth0 が同じネットワークセグメントじゃないので、ルーティングは無理ですね。
リバースプロキシーを導入するか、サーバーA → サーバーB に SSH できるのであれば、SSH LocalFoward が利用できると思います。
サーバーA の 80 番ポートを開けるので、サーバーA 側は root ユーザーで ssh を実行する必要があります。

[root@サーバーA]# ssh -f -N -L 192.168.0.30:80:172.16.0.1:80 (サーバーBの任意のユーザー)@YYY.YYY.YYY.YYY

投稿2019/03/24 06:34

編集2019/03/24 12:03
TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問