私は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つのネットワーク間のパフォーマンスを測定することでした。
最も簡単な解決策は、リバースパスフィルタリングを無効にすることです。デフォルトでは、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
を実行して、設定を一時的に無効にすることもできます。
パトリックの答え
これをする
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つのインターフェイスから着信するパケットが同じインターフェイスで応答されるように、iproute2を使用して両方のインターフェイスに複数のデフォルトルートを設定する必要があります。