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

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

ただいまの
回答率

90.35%

  • CentOS

    2824questions

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

CentOS7で複数nicがある場合のソースルーティングの設定について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,274

mOieZne

score 2

ネットワーク構成図
Server Bのeth0については使用しない予定ですので、図からは割愛しています。

やりたいこと

ServerBからServer Aのtap_dev 172.31.0.1との疎通をさせたいですが、一方方向のみ疎通が取れる状況です。

現在の状況
・ClientとServer A(eth1,tap_dev)へは双方向で疎通がとれています。
ルーティングも問題なさそうです。

・Server A(eth1,tap_dev)とServerB eth1は片方向で疎通が取れます。
Server A⇒Server B
Server A eth1 172.16.0.1⇒Server B 172.16.0.2 === ping OK
ServerA tap_dev 172.31.0.1 ⇒ Server B 172.16.0.2 === ping OK

.Server B ⇒ Server A
Server B 172.16.0.2 ⇒ ServerA eth1 172.16.0.1  === ping OK
Server B 172.16.0.2 ⇒ ServerA tap_dev 172.31.0.1 === ping NG

Server Aのroute -nの実行結果
[root@xxx-xxx-xxx-xxx ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.xxx      0.0.0.0         UG    100    0        0 eth0
xxx.xxx.xxx.0      0.0.0.0         255.255.254.0   U     100    0        0 eth0
172.16.0.0      0.0.0.0         255.255.255.0   U     100    0        0 eth1
172.31.0.0    0.0.0.0         255.255.255.0   U     0      0        0 tap_dev
192.168.0.0   172.31.0.254  255.255.255.0   UG    0      0        0 tap_dev

Server Bのroute -nの実行結果

[root@yyy-yyy-yyy-yyy network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         yyy.yyy.yyy.yyy    0.0.0.0         UG    100    0        0 eth0
yyy.yyy.yyy.0     0.0.0.0         255.255.254.0   U     100    0        0 eth0
172.16.0.0      0.0.0.0         255.255.255.0   U     100    0        0 eth1
172.31.0.0    172.16.0.1      255.255.255.0   UG    0      0        0 eth1

※192.168.0.0/24へのルートはまだ追加していません。

確認してみたこと

  • Server Aでtcpdumpを実行し、Server Bから172.31.0.1へpingを実行

1. tcpdump -i eth1の実行結果
ServerA内でeth1からtap_devへリレーされています。

dumpをwiresharkで確認すると以下のようになります。
5    1.000035    172.16.0.2    172.31.0.1    ICMP    98    Echo (ping) request  id=0x2992, seq=1861/17671, ttl=64 (reply in 6)

しかし、直接コンソールに表示すると以下のようになります。
11:32:14.206928 IP 172.16.0.2 > xxx-xxx-xxx-xxx: ICMP echo request, id 2506, seq 535, length 64

以上のことからServer BからServer A tap_dev 172.31.0.1へpingは送信されているものの、172.31.0.1からの戻りがeth1からではなくeth0に出てしまっているのではないかと考えました。

やってみたこと
SererAのtap_devからの戻りがeth1からではなくeth0から出てしまっているため戻れないので、eth1からServer Bへ戻れるようにServerAにソースルーティングの設定を行ってみました。

1.yum install NetworkManager-config-routing-rules -y

2./etc/iproute2/rt_tablesファイルを開き、末尾に以下を記述を追加
1  inr.ruhep
200 rule200

3./etc/sysconfig/network-scripts/ ディレクトリにrule-eth1を作成して以下を記述
from 172.16.0.1 table rule200

4./etc/sysconfig/network-scripts/ ディレクトリにroute-eth1を作成して以下を記述
172.16.0.0/24 dev eth1 table rule200
default dev eth1 table rule200

※172.16.0.0/24にデフォルトゲートウェイにできるルーターなどのゲートウェイが存在しないため、デバイス名のみ記述しました。

5.設定を反映
systemctl restart network.service

参考サイト
https://ast.qt-space.com/linux/centos7.html 『AST的電子記憶箱』 CentOS7-ネットワーク設定-マルチホーム

https://mano.xyz/2033/ 『mano.xyz』 CentOS7 policy routing する (複数のデフォルトゲートウェイを設定する)

http://blog.techlab-xe.net/archives/5264 『すらりん日記』-ポリシーベースルーティングの話

質問の要領が悪く恐縮ではございますが、識者の皆様のご教授を頂戴できませんでしょうか。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • TaichiYanagiya

    2018/05/07 00:32

    tap_dev は VPN などのトンネリングのために作成したものですか?

    キャンセル

  • mOieZne

    2018/05/07 00:35 編集

    コメントありがとうございます。 ご指摘のとおり、tap_devはVPN用になります。最終的にはserver⇒Client方向の通信ができるようになることが目標ですが、まずは、tap_devまでの疎通ができるようにしたいと考えていました。

    キャンセル

回答 1

checkベストアンサー

0

tap_dev は VPN 用とのことですので、VPN 接続機器どうしの通信のカプセル化を行なうためのインターフェースであって、それ以外のホストから tap_dev を意識する必要はないと思います。

しかし、直接コンソールに表示すると以下のようになります。
11:32:14.206928 IP 172.16.0.2 > xxx-xxx-xxx-xxx: ICMP echo request, id 2506, seq 535, length 64 

「xxx-xxx-xxx-xxx」は伏せ字ではなく、そのままですか?
もし、そうだとすると、tap_dev ではカプセル化されたものを期待していたけれど、Server B から送られたパケットはカプセル化されていないものだったので、
送り先がわからない、ということではないでしょうか? (自信なし)

172.31.0.1からの戻りがeth1からではなくeth0に出てしまっているのではないかと考えました。 

送信元IP = 172.16.0.2 ですので、戻りは 宛先IP = 172.16.0.2 となり、eth1 から返すはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/07 01:34

    ご回答ありがとうございます。

    申し訳ありません。「xxx-xxx-xxx-xxx」は伏字です(アスタリスクの方がわかりやすいでしょうか?)。xxx-xxx-xxx-xxx-xxx はeth0が持っているグローバルIPです。

    (尚、vpnはsoftetherでserver側がsoftether bridge client側にサーバーを置いています。
    構成図は私の前回の質問に記載させていただいています。
    https://teratail.com/questions/124570)

    今、書いていて言うのもおかしいのですが、172.16.0.2⇒xxx.xxx.xxx.xxx(eth0)になっていますね。
    wiresharkでdaumpを見ると、tap_devから返ってきているように見えるので、戻りだけがeht1ではなく、eht0に出ていってしまっていると思っていました。
    tcpdumpの結果をそのまま見る限りだと直接、172.16.0.2からeth0に出ていってしまっていますね・・・どう読み取ったらよいのか悩みます。

    キャンセル

  • 2018/05/07 23:48

    tcpdump の結果はよくわかりませんね。
    softether が何かしているのでしょうか?

    ソースルーティングは一旦忘れて、Server B - Server A 間、Server A - Client 間の通信がそれぞれできているのであれば、プロキシーやポートフォワードで代替できないか検討してみてはいかがでしょうか。

    キャンセル

  • 2018/05/16 23:08

    そうですね。検討してみたいと思います。

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • CentOS

    2824questions

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