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

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

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

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

3476閲覧

CentOS7でipvsadmを用いたロードバランサーを構築したい

ths

総合スコア21

CentOS

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2021/04/04 08:11

編集2021/04/05 10:44

前提・実現したいこと

以下のサイトを参照してCentOS7でLVSを使用したロードバランサーを構築しました。
VirtualBox+CentOS7でロードバランサ構築

しかし、自端末(ホストOS)のブラウザからLBのアドレス(192.168.211.10)にアクセスしてもレスポンスが返ってきません。
どうすれば、LBのアドレスに接続して、Webサーバからのレスポンスを得られるようになりますか?

切り分け

上記サイトと同じく、LBにはipvsadminだけ導入し、keepalivedは導入していません。
Webサーバ1,2はnginxで動かしています。
Webサーバに直接接続すれば意図した結果になります。

構成

ホストOS:Windows10
ロードバランサー、WebサーバはVirtualBox+Vagrantで構築
イメージ説明

構成(4/5修正)

Webサーバのeth2を取りました。
イメージ説明

ホストOSのブラウザから「http://192.168.211.10」に接続したときのパケットの流れをtcpdumpコマンドでトレース

ホストOS(192.168.210.1)からのSYNパケットがLB、Webサーバに届いているように見えます。

[root@krtlbdev01 ~]# tcpdump -i any port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 19:33:34.651352 IP 192.168.210.1.55235 > krtlbdev01.http: Flags [S], seq 4072121208, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:34.651373 IP 192.168.210.1.55235 > 192.168.33.6.http: Flags [S], seq 4072121208, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:34.651391 IP 192.168.210.1.55236 > krtlbdev01.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:34.651395 IP 192.168.210.1.55236 > 192.168.33.5.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
[root@krtwebdev01 ~]# tcpdump -i any port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 19:33:34.654797 IP 192.168.210.1.55236 > krtwebdev01.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:35.799655 IP 192.168.210.1.55236 > krtwebdev01.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:37.799419 IP 192.168.210.1.55236 > krtwebdev01.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:41.799935 IP 192.168.210.1.55236 > krtwebdev01.http: Flags [S], seq 1394981027, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
[root@krtwebdev02 ~]# tcpdump -i any port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 19:33:34.656715 IP 192.168.210.1.55235 > krtwebdev02.http: Flags [S], seq 4072121208, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:34.903779 IP 192.168.210.1.55237 > krtwebdev02.http: Flags [S], seq 2643996327, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:35.749220 IP 192.168.210.1.55235 > krtwebdev02.http: Flags [S], seq 4072121208, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 19:33:35.948054 IP 192.168.210.1.55237 > krtwebdev02.http: Flags [S], seq 2643996327, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

その他必要な情報がありましたら教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

-m, --masquerading で振り分けているので、Webサーバーからの戻りパケットは 192.168.33.3 に届く必要があります。
Webサーバーの ip r によると、現状では以下の経路になっていて正しく通信できないのだと思います。

(ホストOS から HTTP リクエストを送出した場合) (行き:ホスト→LVS) 192.168.210.1 → 192.168.210.10 (行き:LVS→Web) 192.168.210.1 → 192.168.33.5 ※D-NAT (戻り: ←Web) 192.168.210.1 ← 192.168.33.5 ※Webサーバーは 192.168.210.0/24 に属しているので、eth2 から直接返す。 (行き:ホスト← ) 192.168.210.1 ← 192.168.33.5 ※192.168.210.10 からの戻りじゃないので、破棄。
(外部ホストから HTTP リクエストを送出した場合) (行き:外部→LVS) AAA.BBB.CCC.X → 192.168.210.10 (行き:LVS→Web) AAA.BBB.CCC.X → 192.168.33.5 ※D-NAT (戻り: ←Web) AAA.BBB.CCC.X ← 192.168.33.5 ※Webサーバーはデフォルトゲートウェイに返す。 2つ設定されているうち、metric の小さい 10.0.2.2 に返す。 外部ホストには届かないか、届いたとしても 192.168.210.10 からの戻りじゃないので、破棄。

-m, --masquerading にするのであれば、Webサーバーの IPアドレスは複数設定せず、LVS とつながるもの 1つのみにした方が簡単だと思います。

投稿2021/04/04 15:24

TaichiYanagiya

総合スコア12146

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

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

ths

2021/04/05 09:30

回答ありがとうございます。 Webサーバのeth2(192.168.210.0/24)を取りましたが、結果は変わりませんでした。 戻りの通信、eth0の10.0.2.0/24から行こうとしているのでしょうか?
TaichiYanagiya

2021/04/05 11:59

> 戻りの通信、eth0の10.0.2.0/24から行こうとしているのでしょうか? だと思います。
ths

2021/04/05 12:41

https://kun432.hatenablog.com/entry/network-study-with-vyos 上記サイトを参考に ip route delete default via 10.0.2.2 を実施したら、目的の通信が実現できました。 vagrantのネットワークについてもう少し確認すべきでした。 ありがとうございました。
soma21

2021/06/02 15:25

いきなり失礼します。 質問者様と同じ状況となっているのですが、「ip route delete default via 10.0.2.2を実施」のところについて詳しく教えていただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問