web-dev-qa-db-ja.com

あるインターフェースを他のインターフェースからpingする

私は2つのインターフェースeth0とeth1を備えたコンピューター(Linuxを実行している)を持っています。
eth0、アドレス10.0.0.100/24
アドレス192.168.1.100/24のeth1
2つの異なるネットワーク(10.0.0.0/24と192.168.1.0/24)に接続されており、これらのネットワークはルーターに接続されています。 10.0.0.0上の他のコンピューターは、192.168.1.0上のコンピューターにpingを実行できます。

しかし、私がこのコンピューターで試してみると

ping -I eth0 192.168.1.100

返事がありません。 eth1をリッスンすると、10.0.0.100からicmp要求を受信しますが、応答は送信されません。

いくつかの静的ルートを設定しようとしましたが、違いはありませんでした。また、カーネルrp_filterを調べて、それを2(および0と1)に変更しましたが、違いもありませんでした。

誰もがこれを解決する理由と方法を知っていますか?

これを実行したかった唯一の理由は、1台のコンピューターを使用して2つのネットワーク間のパフォーマンスを測定することでした。

3
rdrmntn

最も簡単な解決策は、リバースパスフィルタリングを無効にすることです。デフォルトでは、Linuxは、別のインターフェースに着信するはずのインターフェースに着信するパケットをフィルターで除外します(パケットが他のインターフェースのサブネットと一致するため)。

これをする

echo 'net.ipv4.conf.eth0.rp_filter = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.eth1.rp_filter = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.rp_filter = 0' >> /etc/sysctl.conf
sysctl -p

これにより、設定がsysctl構成ファイルに追加され、構成が再ロードされます。 echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filterを実行して、設定を一時的に無効にすることもできます。

8
Patrick

パトリックの答え

これをする

echo 'net.ipv4.conf.eth0.rp_filter = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.eth1.rp_filter = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.rp_filter = 0' >> /etc/sysctl.conf
sysctl -p

ubuntu16.04では動作しませんでした。

これはうまくいきました:

sysctl -w net.ipv4.conf.all.rp_filter=0
1
Dimka Ch

1つのインターフェイスから着信するパケットが同じインターフェイスで応答されるように、iproute2を使用して両方のインターフェイスに複数のデフォルトルートを設定する必要があります。

1
Jure1873