ネットワークカードを搭載したUbuntu 14.04サーバーがあります。そのNICのMACアドレスは、同じサブネット(XXX1)のデータセンターゲートウェイによって1つのサブネット(XXX0/24)のIP(XXX100)に割り当てられ、まったく異なるサブネットで割り当てられます。 1つの追加IP範囲サブネット(YYY0)/ 28)。
同じインターフェイス(eth0)にXXX100とYYY1を使用してサーバーを設定し、サーバーは2つのIPアドレスを介して残りのインターネットに接続して接続できます。
2番目のサブネットのIPアドレスを使用するいくつかの仮想マシンがあります。私は彼らがホストの2番目のIPアドレスYYY1をゲートウェイアドレスとして使用する必要があると仮定します(私が理解したところ、彼らはデータセンターのゲートウェイアドレスが別のサブネットにあるためアクセスできないからです)。私が持っているすべてのIPアドレスXXX100とYYY0 / 28はデータセンターのゲートウェイで静的にルーティングされるため、これに対するすべての要求は私のサーバーのNICに移動します。また、仮想マシンのMACアドレスではなく、そのNICのMACアドレスからのみ要求を受け入れます。
YYY0/28 サブネットに対するすべての要求がデータセンターのゲートウェイ XXX1 経由でルーティングされるようにホストを設定するにはどうすればよいですか。
私が知っている限り、単にネットマスクを拡張することはできません。これは、ネットワーク上の他のサーバーにアクセスできなくなる可能性があるためです。
これはサーバーからのものです。/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address X.X.X.100
netmask 255.255.255.0
gateway X.X.X.1
dns-nameservers 8.8.8.8 8.8.4.4
iface eth0 inet static
address Y.Y.Y.1
netmask 255.255.255.240
/etc/sysctl.conf
この行を有効にした後:
net.ipv4.ip_forward=1
VMはIPアドレスとしてYYYn(n> 1)を使用し、ゲートウェイとしてYYY1を使用します。
上記の設定では、仮想マシンは2つのIPアドレスを介してホストに接続できますが、他のホストには接続できません。仮想マシンがISPゲートウェイXXX1のMACアドレスを見つけることができないようです。
$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at <incomplete> on eth0
しかし、奇妙なことに、時々...
$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] on eth0
これら2つの例はわずか数分です。仮想マシンにpingを送る気がしました。特にピングが鳴る感じがしました。~からVMは純粋に偶然かもしれませんが、MACアドレスを取得するプロセスを高速化します。
MACアドレスとXXX1を「所有」すると、すべてが実際にうまく機能します!仮想マシンからインターネットにアクセスでき、YYYnアドレスを使用してインターネットから仮想マシンにアクセスできます。しかし、常に動作するわけではありません。時々、YYY1のMACアドレスに再び「忘れて」アクセスできなくなることがあります。
実際、ARPリストにYYY1がリストされていることに驚きました。これは、同じサブネット上のデバイスにのみ適用されると思いました。私の目標は、ホストをゲートウェイアドレス(YYY1)として使用し、ホストにXXX0/24ですべての通信を実行させることで問題を回避することです。
私の構成は合理的ですか?
この設定を使用している人はいますか?
奇妙な「物忘れ」の原因は何ですか?
修正する:
VMがホストのIPアドレスの代わりにデータセンターゲートウェイのMACアドレスをゲートウェイ(YYY1)として直接使用しようとしましたが、問題は解決しません。
$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at c8:60:00:5e:bd:e0 [ether] PERM on eth0
raw@test-server:~$ sudo arp -s Y.Y.Y.1 cc:e1:7f:07:e0:af
raw@test-server:~$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From Y.Y.Y.3 icmp_seq=1 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=2 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=3 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=4 Destination Host Unreachable
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
pipe 3
ARPエントリがある場合にのみ正しく機能しますSIOCSARP: Network is unreachable
。
$ arp -an
? (X.X.X.1) at cc:e1:7f:07:e0:af [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=5.92 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=6.13 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 5.929/6.083/6.138/0.118 ms
数分後に再び消えた。
$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
答え1
arp
データセンターのオペレータはルーティングの仕組みをよく理解していないようです(これを行うにはサブネット内にゲートウェイが必要です)、ゲートウェイのMACアドレスとIPアドレスを含む静的ダミーエントリを追加する必要があります。はいサブネット内(使用中ではありません!)
未使用のYYY0/28アドレスの1つを使用し、それがゲートウェイであるかのように偽装します(たぶんそうかもしれません)。しなければならないとにかくYYY1)。その IP アドレスをルーティングテーブルのゲートウェイとして使用します。仮想マシンがARP要求(ハードウェアアドレスはすでにARPテーブルにあります)を妨げないように、そのアドレスに静的エントリを割り当て、それをarp
ゲートウェイに送信します。arp -s Y.Y.Y.x c8:60:00:5e:bd:e0
説明する:
通常、システムがそのサブネットの他のホストに接続しようとすると、システムはARPを使用して要求されたIPアドレスを持つMACアドレスを見つけます。その後、ホストはARP要求に応答します。そうしないと、「ホストに接続できません」というエラーが発生します。
これで、何らかの理由でサブネットにないホスト(ゲートウェイルーター)が発生しました。ルーターを介してIPパケットをサブネット外の宛先に送信するだけで、なりすましIPアドレスを使用でき、なりすましIPアドレスを使用するルーターの固定ARPテーブルエントリを作成できます。このルータに移動(または通過)する必要があるすべてのトラフィックは、システムがARPブロードキャストを介してそのMACアドレスを取得することなく、正しいMACアドレスに送信されます。
この方法でプリンタゲートウェイボックスを正常に設定しました。 MACアドレスと利用可能なローカルIPアドレスを静的ARPエントリとして入力し、そのアドレスにTelnetで接続して正しく設定しました。