私は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だけです。彼らのゲートウェイにアクセスできません。
デフォルトルートは同じネットワークセグメント(イーサネットブロードキャストドメイン)上にある必要があり、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への着信パケットをブロックする場合を除く)。