サーバーAからサーバーB(Ubuntu 16.04)に137.74.9.193をルーティングしようとしています。
サーバーAから137.74.9.193にpingを実行しようとすると、期待どおりに機能しますが、パーソナルコンピューターからpingを実行しようとすると機能しません。
サーバーA:
Public IP (ens3): 213.32.69.16
Public IP: 137.74.9.193
Local Tunnel IP: 10.0.0.1
サーバーB:
Public IP (eth0): 139.59.131.76
Local Tunnel IP: 10.0.0.2
サーバーAの構成:
nano/etc/network/interfaces
auto lo
iface lo inet loopback
auto ens3
iface ens3 inet dhcp
auto tun1
iface tun1 inet static
address 10.0.0.1
netmask 255.255.255.252
pre-up iptunnel add tun1 mode gre local 213.32.69.16 remote 139.59.131.76 ttl 255
up ifconfig tun1 multicast
up ifconfig tun1 arp
up ifconfig tun1 broadcast
pointopoint 10.0.0.2
post-up ip route add 137.74.9.193 via 10.0.0.2 dev tun1
post-down iptunnel del tun1
実行されたコマンド:
# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ echo 1 > /proc/sys/net/ipv4/conf/ens3/proxy_arp
# Add ip to arp to complete the loop.
$ arp -s 137.74.9.193 fa:16:3e:76:31:ea -i ens3 pub
結果カーネルIPルーティングテーブル:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 213.32.64.1 0.0.0.0 UG 0 0 0 ens3
10.0.0.2 * 255.255.255.255 UH 0 0 0 tun1
ip193.ip-137-74 10.0.0.2 255.255.255.255 UGH 0 0 0 tun1
213.32.64.1 * 255.255.255.255 UH 0 0 0 ens3
サーバーBでの構成:
nano/etc/network/interfaces
auto eth0
iface eth0 inet static
address 139.59.131.76
netmask 255.255.240.0
gateway 139.59.128.1
iface eth0:0 inet static
address 137.74.9.193
netmask 255.255.255.255
broadcast 137.74.9.193
auto tun1
iface tun1 inet static
address 10.0.0.2
netmask 255.255.255.252
pre-up iptunnel add tun1 mode gre local 139.59.131.76 remote 213.32.69.16 ttl 255
up ifconfig tun1 multicast
up ifconfig tun1 arp
up ifconfig tun1 broadcast
pointopoint 10.0.0.1
post-down iptunnel del tun1
実行されたコマンド:
# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# Route to tun1
ip route add 10.0.0.1 dev tun1
カーネルIPルーティングテーブル:
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.0.0.1 * 255.255.255.255 UH 0 0 0 tun1
10.19.0.0 * 255.255.0.0 U 0 0 0 eth0
139.59.128.0 * 255.255.240.0 U 0 0 0 eth0
助けてくれてありがとう:)
更新(2016年11月14日):サーバーBにルートコマンドを追加
あなたの質問の情報から私が知る限り、あなたの問題はそれです
arp -s 137.74.9.193 fa:16:3e:76:31:ea -i ens3 pub
あなたが思っていることをしません。このコマンドは、サーバー上に新しいARPテーブルエントリを作成します。これにより、サーバーがens3
を介して137.74.9.193
にパケットを送信する場合、宛先MACアドレスをすでに指定しているため、ARP要求は実行されません。
ただし、ルーターがパケットをサーバーに送信することを認識していることも確認する必要があります。ルーターは137.74.9.193
のARP要求を送信します。ただし、そのIPアドレスはサーバー上のどのインターフェイスにも割り当てられていないため、サーバーはこれらのARP要求に応答しません。
これを機能させるには、プロキシARPを有効にする必要があります。これは次のコマンドで実行できます。
echo 1 > /proc/sys/net/ipv4/conf/ens3/proxy_arp
arp
コマンドの代わりにそのコマンドを使用すれば、うまくいくと思います。 (これがポイントツーポイントインターフェイスのピアIPで機能することを知っています。トンネルインターフェイスを介してトラフィックを送信するルーティングテーブルエントリで同じセットアップをテストしたことはなく、確実にわかりません。追加の手順が必要かどうか。)
サーバーBをホストしているISPが送信元IPアドレスに基づいてトラフィックをフィルタリングする場合、送信元アドレスとして137.74.9.193
を使用してそこからパケットを送信できない場合があります。外部から137.74.9.193
にpingを実行し、サーバーBのeth0
でICMPパケットをキャプチャすると、ICMPエコー応答がそのインターフェイスで送信されているかどうかを確認できます。
サーバーBがICMPエコー応答を送信していて、宛先に到達しないことがわかった場合、最も可能性の高い説明は、ISPが送信元IPアドレスに基づいてフィルタリングしていることです。
その場合、2つのオプションがあります。 ISPに連絡して、フィルターを更新できるように、この送信元IPでパケットを発信する必要があることを説明することができます。または、サーバーAを介してリターントラフィックをトンネリングすることもできます。
Aを介してリターントラフィックをトンネリングする最も簡単な方法は、次のようなルーティングテーブルをBに作成することです。
Destination Gateway Genmask Flags Metric Ref Use Iface
default * 0.0.0.0 UG 0 0 0 tun1
213.32.69.16 gateway 255.255.255.255 UG 0 0 0 eth0
10.0.0.1 * 255.255.255.255 UH 0 0 0 tun1
10.19.0.0 * 255.255.0.0 U 0 0 0 eth0
139.59.128.0 * 255.255.240.0 U 0 0 0 eth0
ただし、これにより、インターネットの他の部分から139.59.131.76
に到達できなくなります。両方のIPアドレスを介してBに同時に到達できるようにする場合は、2つの異なるデフォルトルートとルーティングポリシーを作成して、パケット送信元IPに基づいてどちらかを選択する必要があります。