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

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

ただいまの
回答率

88.10%

異なるネットワーク間でうまく通信できません。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 438

score 175

※こちらは前回の質問と関連しています。

次のようにBGPを利用してroute情報を交換したいのですが、
通信先のネットワークが異なりうまく通信できません。
質問は、以下の「お聞きしたいこと」に記載させていただきました。
イメージ説明

発生した問題

host2のRR(Route Reflector、172.16.1.111、赤のひし形)にhost1のルーター(10.10.10.11、黄色の丸)から通信することができませんでした。
原因と自分なりの解決策がございますが、うまい方法とは思えません。以下の通りです。

原因

host1からhost2のRRへ通信を行う際、次のようなpacketを送らなければなりません。

10.10.10.11:41715 > 172.16.1.111:179*
*左がsrc、右がdst


これは図中の赤線を通って到達することが確認できるのですが、復路(以下)

172.16.1.111.bgp > 10.10.10.11.41715


では非対称通信が認められないのか、青線を通ることはなく、host1にパケットが届かないのが原因でした。

ひとまずの解決策

次のようにすることでとりあえずは通信が可能で、経路情報を交換できました。
host2にて青線を通る復路のパケットの送信先を無理やり赤線にします。

iptables -t nat -A OUTPUT -j DNAT -d 10.10.10.11 -p tcp --sport 179 --to 172.16.1.11
iptables -t nat -A OUTPUT -j DNAT -d 10.10.10.11 -p tcp --dport 179 --to 172.16.1.11:179


host1にて赤線を通ってきた復路のパケットの送信先を無理やり元に戻します。

iptables -t nat -A PREROUTING -i eth1 -j DNAT -p tcp --sport 179 --to 10.10.10.11
iptables -t nat -A PREROUTING -i eth1 -j DNAT -p tcp --dport 179 --to 10.10.10.11:179


これでhost1からhost2のRRへ通信を行い、経路を交換できるのですが、お聞きしたいことが2点あります。

お聞きしたいこと

  1. host1→host2は解決しますが、host2→host1は往路がそもそも届きません。
    172.16.1.111:41715 > 10.10.10.11:179
    送信元がプライベートアドレスだからでしょうか。
    解決策がありましたらご教授いただければ幸いです。

  2. 異なるネットワークに送る場合、もう少しうまい方法はないでしょうか。NATを使わないようにするためにCalicoを使っているのですが、台無しにしているように思います。

少々無理のある設定とは思いますが、何卒よろしくお願いいたします。

環境

  1. 図中のSwithやgatewayのルーターはクラウドプロバイダー管理下のため、設定することはできません。
  2. host1、host2はlinuxサーバーです。
  3. RRはcalicoのルーターと兼務させております。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

お聞きしたいこと 1
プライベートアドレスはグローバルネットワークでは破棄されます。

お聞きしたいこと 2
異なるネットワーク間ではrp_filterをlooseにしたり、iptablesのstateがinvalidなものはdropされる可能性があるので確認が必要です。

また、natを使うとあまりにも複雑になるので、ipsetでアドレスを管理し、iptablesでmark、pbrでrouteを管理といった具合にやると多少わかりやすくなりました。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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