Date: Sun, 14 Nov 2004 13:11:49 -0800 From: "Jacob S. Barrett" <jbarrett@amduat.net> To: freebsd-net@freebsd.org Subject: Universal Client Gateway Message-ID: <200411141311.49502.jbarrett@amduat.net>
next in thread | raw e-mail | index | archive | help
I am trying to make what some call a universal client gateway. Finding anything via google on the subject is turning up nothing. Basically I want setup a gateway that will masquerade IP from any host reguardless of its IP configuration. For example if a host is configured with IP 192.168.2.2 and a gateway of 192.168.2.1 my gateway would reply to ARP requests for 192.168.2.1. When the host forwards its IP traffic to me I would masquerade the packet with my IP and forward it. When the reply comes back my gateway would de-masquerade the packet and forward it back the host. I have it all working except for the return forwarding. For proxying the configured gateway address for incoming packets I running arpd on the LAN interface. It replies to all unclaimed IP addresses. So when the host ARPs for 192.168.2.2 it replies with my gateways MAC. This works great. For the return path I have tried a few things with no luck. ARP hacks: I first looked into adding an ARP entry using arp(8), but since no interfaces have subnets that matches the hosts IP it won't add it. Also arp(8) doesn't support specifying an interface to force assignment. If I wrote my own program to force an entry into the ARP table with the correct interface would that work? Route hacks: I then tried adding a route entry for the LAN interface. I used the command: route add -host 192.168.2.2 -interface vlan1000 This produces a route entry that looks promising: 192.168.2.2 vlan1000:0.xx.xx.xx.xx.aa UHLS 0 0 vlan10 But when you dump the arp tables we see: ? (192.168.2.2) at 00:xx:xx:xx:xx:aa on vlan1000 permanent [vlan] Which is the MAC address of the gateway and not the host. What I really want is an routing entry that looks like a normal local host: 192.168.0.27 0.xx.xx.xx.xx.bb UHLW 1 4953 vlan10 904 I have tried several combinations of commands with route(8) with no luck. Is there a way to add the route as a direct route to 0.xx.xx.xx.xx.cc? Can I do it if I write my own program to add the route to the table? I don't want to go the route of adding the faked gateway address to the interface with matching subnet to fit the client's IP in. The problem with that is if a client is configure with IP 10.0.0.1/8 with a gateway of 10.255.255.254 the smallest subnet I could create would be /8. And that would mostlikely cause problems for connectly configured hosts trying to communicate to 10/8. So does anyone understand what I am trying to do? Do you know how to do it? Am I going about this all wrong? -- Jacob S. Barrett jbarrett@amduat.net www.amduat.net "I don't suffer from insanity, I enjoy every minute of it."
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411141311.49502.jbarrett>