Hi, On 5/29/06, Giancarlo Razzolini <[EMAIL PROTECTED]> wrote:
> But I'm unable to load balance ftp-proxy traffic, and FTP only goes > through my default gateway on my OpenBSD router. I can understand > why this is not working with the pools faq ruleset, but I don't know how > to make it work. > As all traffic is nated to the firewall address, you can load balance traffic with source ip address of the firewall.
I have adopted a different approach. I'm unable to test for the next 2 days so this has gone through limited testing on my laptop (vmware + obsd 3.9). Here it is: $ext_if1 holds default gateway ifconfig lo0 alias 127.0.0.2 pf.conf nat on $ext_if1 from 127.0.0.2 to any -> $ext_if2 pass all pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) \ from $ext_if2 to any keep state Note: I'm not NATing from $local_net or any other. The idea is to NAT on $ext_if1 which holds default gateway, but use $ext_if2 IP during NAT. The final pass out rule (from the pf pools faq) ensures packets with source address of $ext_if2 are always routed to $ext_gw2. If daemons on the firewall bind their sockets to 127.0.0.2 before calling connect(), that connection should go through $ext_if2/gw2. The pseudo-code would go like: fd = socket(...) bind(fd, "127.0.0.2") connect(fd, "www.google.com") This actually works for me (but I don't trust my vmware setup). I tested with this perl code: ========== i manually re-typed this so please excuse typos ==== #!/usr/bin/perl use warnings; use strict; use Socket; socket(SOCK, AF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "socket: $!"; bind(SOCK, sockaddr_in(0, inet_aton('127.0.0.2'))) or die "bind: $!"; my ($port, $laddr) = sockaddr_in(getsockname(SOCK)); print "local ip:port = $laddr:$port\n"; my $remote = sockaddr_in(25, inet_aton('smtp.mail.yahoo.com')); connect(SOCK, $remote) or die "connect: $!"; print while defined ($_ = <SOCK>); # press Ctrl + C to exit ========== This produces the following output: ========== local ip:port = 127.0.0.2:26082 220 smtp105.plus.mail.re2.yahoo.com ESMTP ========== Hooray! I'm not exactly sure how ftp-proxy can be made to use this. My guess is to run multiple instances each with "-a 127.0.0.1 -p 8021", "-a 127.0.0.2 -p 8022", etc. This should cause each ftp-proxy instance to use a different gateway. pf will need to rdr ftp connections to the various ftp-proxy-ies on round-robin. What do you guys think? - Raja