web-dev-qa-db-ja.com

別のサーバーを介してトラフィックをルーティングするにはどうすればよいですか?

私は2つのLinux(Ubuntu)サーバーAとBを持っています。サーバーAはインターネットにアクセスできますが、Bはアクセスできません。サーバーは、それぞれの(個別の)デフォルトゲートウェイを介して相互に通信できます。

サーバーAを介してポート転送することにより、インターネットからサーバーBにアクセスできます。sshを許可する例として:

iptables --table nat --insert PREROUTING --protocol tcp --dport 61000 --jump DNAT --to-destination <B_IP>:22

ただし、サーバーBがサーバーAを介してインターネットにアクセスできるようにするにはどうすればよいですか?サーバーAは、次の方法でポストルーティングする準備ができています。

iptables --table nat --insert POSTROUTING --protocol tcp --jump MASQUERADE

サーバーBのデフォルトゲートウェイをAのIPに置き換えようとすると、Aにルーティングできなくなるため、RTNETLINK answers: Network is unreachableになります。アクセスできるのはサーバーAとBだけです。彼らのゲートウェイにアクセスできません。

1
user1768788

デフォルトルートは同じネットワークセグメント(イーサネットブロードキャストドメイン)上にある必要があり、2つのサーバーがルーターを介して接続されているように見えます。

ただし、おそらく2つの間に何らかのトンネルを設定できます。最も単純なのは、IPv4-over-IPv4トンネルです。説明のために、10.1.0.100をサーバーAアドレス、10.2.0.1サーバーのBとします。サーバーBの/etc/network/interfacesに追加(または/etc/network/interfaces.dにファイルを追加)できます。

iface tun0 inet tunnel
    address 192.168.0.1
    local 10.2.0.1
    endpoint 10.1.0.100
    mode ipip
    netmask 24
    gateway 192.168.0.2

およびサーバーA:

iface tun0 inet tunnel
    address 192.168.0.2
    local 10.1.0.100
    endpoint 10.2.0.1
    mode ipip
    netmask 24

ネットワークトポロジとゲートウェイ構成によっては、これで十分な場合があります。

説明:これにより、IPv4パケットをネットワーク上で直接送信する代わりに、それらを別のIPv4パケットにラップして、addressからendpointに送信する仮想インターフェイスがセットアップされます。

ネットワークトポロジについては説明しませんが、AのゲートウェイがおそらくBに到達する方法を知っている場合は、SNAT/MASQUERADEは必要ない場合があります(ファイアウォールがBへの着信パケットをブロックする場合を除く)。

1