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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

Q&A

解決済

1回答

782閲覧

VirtualboxでLVSを使った負荷分散web構成を構築するときに、ホストオンリーアダプターが繋がっているとクライアントに通信が戻ってこないのはなぜでしょうか。

takashi31

総合スコア4

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0グッド

0クリップ

投稿2022/05/02 01:41

編集2022/05/02 01:42

構成

VirtualboxのCentOS7でLVSを使って以下のような負荷分散web構成を構築しています。
※LVSサーバは一台のみなのでVIPは使用せずホストオンリーアダプターのアドレスを流用しています。
イメージ説明

問題・質問内容

LVSの設定とリアルサーバのhttpd設定をしてwebアクセスをするとページが表示されず、tcpdumpでリアルサーバのパケットキャプチャをしたところ、きちんと負荷分散はされてリアルサーバに届いているようですが、送信元に応答を返していないことがわかりました。

リアルサーバのログ(内部ネットワーク(enp0s9))
[root@centos7-web1 ~]# tcpdump -ni enp0s9 -e port 80 09:30:10.695422 08:00:27:fb:a5:fc > 08:00:27:e1:5a:91, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64837 > 172.16.0.22.http: Flags [S], seq 860246530, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 09:30:10.695432 08:00:27:fb:a5:fc > 08:00:27:35:69:13, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64838 > 172.16.0.33.http: Flags [S], seq 918242140, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 09:30:10.937128 08:00:27:fb:a5:fc > 08:00:27:e1:5a:91, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64840 > 172.16.0.22.http: Flags [S], seq 3418898159, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 09:30:11.686764 08:00:27:fb:a5:fc > 08:00:27:e1:5a:91, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64837 > 172.16.0.22.http: Flags [S], seq 860246530, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 09:30:11.686779 08:00:27:fb:a5:fc > 08:00:27:35:69:13, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64838 > 172.16.0.33.http: Flags [S], seq 918242140, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 09:30:11.938155 08:00:27:fb:a5:fc > 08:00:27:e1:5a:91, ethertype IPv4 (0x0800), length 66: 192.168.56.1.64840 > 172.16.0.22.http: Flags [S], seq 3418898159, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 クライアントに応答を返したログが見当たらない

引き続き調査したところ、リアルサーバのホストオンリーアダプターのアドレス宛にも通信を行っている事が分かり、リアルサーバのホストオンリーアダプターを止めて、経路を一つにしてみるとクライアントに応答が返ってくるようになり、webページが表示されました。

ホストオンリーアダプターが繋がっているとリアルサーバが応答を返さないのはなぜでしょうか。それともホストオンリーアダプターが繋がっていること自体が問題ではなく、複数の通信経路があったことが原因なのでしょうか・・・。どなたかお分かりになる方がいらっしゃいましたらご教示いただきたいです。

環境

■Windows
Windows10 pro 21H2
■Virtualbox
Virtualbox 6.1.14 r140239
■CentOS
CentOS Linux release 7.9.2009 (Core)
■LVS
ipvsadm-1.27-8.el7
■Apache
httpd-2.4.6-97.el7

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

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

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

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

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

guest

回答1

0

ベストアンサー

LVS-NAT なのですよね?
ルーティング(経路)の問題です。

LVS-NAT は、クライアントから LVS へのアクセスを宛先NAT (DNAT) でリアルサーバーに転送し、リアルサーバーからの戻りパケットを逆NAT してクライアントに返します。

(行き) Client --[192.168.56.1 -> 192.168.56.66]-> LVS --[192.168.56.1 -> 172.16.0.22]-> Web1 (戻り) Client <-[192.168.56.1 -> 192.168.56.66]-- LVS <-[192.168.56.1 <- 172.16.0.22]-- Web1 Web1「192.168.56.1 は知らんアドレスだから LVS (デフォルトルート) に送るで。」 LVS「さっき DNAT で変換・転送した戻りだな。元に戻して転送しよう。」 Client「192.168.56.66 から返事来た。(≧▽≦)」

ここで、クライアントとリアルサーバーが同一ネットワークでつながっている場合、リアルサーバーでは、同一ネットワーク宛は直接送信する経路が優先されます。

(行き) Client --[192.168.56.1 -> 192.168.56.66]-> LVS --[192.168.56.1 -> 172.16.0.22]-> Web1 (戻り) Client <-192.168.56.1 <- 172.16.0.22]------------------------------------------- Web1 Web1「192.168.56.1 は直接送信できるやんけ。」 ※受け取った NIC とは別の NIC から送信できる。 LVS「...」 Client「192.168.56.66 から返事来ないス。知らないアドレスからパケット来たけど捨てるス。( ᷄・‸・᷅ )」

実際のサービス環境では、クライアントからのアクセスは上位ルーターを経由して、192.168.56.0/24 以外の IPアドレスになるので、問題にはならないと思います。
どうしても、192.168.56.0/24 からアクセスしたいのであれば、リアルサーバー側でパケットを受けた NIC から返すようなルーティング(ソースルーティング)が必要です。

投稿2022/05/04 01:38

TaichiYanagiya

総合スコア12146

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

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

takashi31

2022/05/05 23:43

なるほど...!そういう事なんですね! ご丁寧に解説いただきありがとうございました! とても勉強になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問