Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have a computer (running Linux) with 2 interfaces eth0 and eth1.
eth0 with address 10.0.0.100/24
eth1 with address 192.168.1.100/24
They are connected to 2 different networks (10.0.0.0/24 and 192.168.1.0/24), these networks are connected with a router. Other computers on 10.0.0.0 can ping a computer on 192.168.1.0.

But if I, on this computer, try

ping -I eth0 192.168.1.100

I don't get any reply. If I listen on eth1 I receive icmp request from 10.0.0.100 but it does not send any reply.

I've tried to set some static routes but did not make any difference. I also read up on kernel rp_filter and changed that to 2 (and 0, and 1) but did not make any difference either.

Anyone knows why and how to solve this?

The only reason I wanted to do this was to measure performace between the two networks using a single computer.

share|improve this question
    
Can you provide more information? Which computer is 192.168.1.100 (the computer on both networks, or some other one)? Also what is eth0? On the computer connected to both networks, what interface has which IP? –  Patrick Feb 20 '12 at 3:04
    
Updated the post with interface and adresses. –  jortan Feb 20 '12 at 10:14
    
Updated my answer below with an additional rule for the lo interface. This is because the reply to the ping is going across the loopback interface since youre pinging yourself. Creating source based routing rules cannot fix this since the rule that looks up local IPs is in the local table, and yanking rules out of that table gets messy (yes its technically possible, but not a good idea). –  Patrick Feb 20 '12 at 16:51
add comment

2 Answers

You probably need to setup multiple default routes for both interfaces with iproute2 so that packets coming in from one interace are replied to on the same interface

share|improve this answer
    
This seem to be the correct solution although I haven't got it to work yet. I found this blogg post: kindlund.wordpress.com/2007/11/19/… and will try some more on this. –  jortan Feb 19 '12 at 21:00
    
That's the blog I've used to create this on my "multi-homed" server. If you set it up right pings will start working. –  Jure1873 Feb 20 '12 at 8:13
add comment

The simplest solution is to disable reverse path filtering. By default linux filters out packets coming in on an interface which it thinks should have come in on a different interface (because the packet matches the other interface's subnet).

To do this

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

This adds the setting to the sysctl config file and then reloads the config. You can also temporarily disable the setting by doing echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter.

share|improve this answer
    
Tried it with the same result. –  jortan Feb 19 '12 at 20:58
    
You'll also need to set 'net.ipv4.ip_forward=1' in /etc/sysctl.conf. –  Shaafiee Jan 15 '13 at 4:25
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.