🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: bit.listserv.openbsd-pf
Article #271

Help with NAT to external carp interface

#271
From: Sheldon Jones
Date: Wed, 01 Apr 2009 06:41
124 lines
4446 bytes
Hi all,

I'm having trouble with carpnodes and nating outgoing traffic to the 
external
carp interface. I'm trying to get traffic leaving my LAN thru the 
firewall to
have the external carp1 address xxx.yyy.60.21 instead of the $ext_if 
60.18 or
60.19 depending on which firewall carp picked. This way if I start a long
lived connection like an scp thru the carp firewalls I can fail the 
connection
over. Both firewalls are PC Engines WRAP with 3 NICs running 4.4obsd.

 From my laptop which is behind the firewalls on 10.10.10.8 with a 
gateway of
10.10.10.1 (carp0). If I nslookup google.com it hangs for a second before
returning the result. running 'tcpdump -i pflog0 -n -e' on each firewall 
I get
a blocked packet at the start of every nslookup.

rule 0/(match) block in on vr0: xxx.yyy.48.7.53 > 
xxx.yyy.60.21.60157:[|domain]

If I change the pf.conf and put $ext_if instead of $carp_if everything works
fine but traffic is leaving on my $ext_if instead of the $carp_if and long
lived connection wont fail over when one of the firewalls goes down.


How can I change my setup to have load balancing and have my external IP be
my carp1 address? Any help would be greatly appreciated.

Thanks in advance,
Sheldon

      router
         |
 +-----carp1----+
 |              |
FW1 - pfsync - FW2
 |              |
 +-----carp0----+
         |
       laptop

##########################
# Firewall 1's net setup #
##########################
 hostname fw1

 sysctl net.inet.carp.preempt=1
 sysctl net.inet.ip.forwarding=1

 ifconfig pflog0 create up
 ifconfig lo0 127.0.0.1     netmask 255.0.0.0
 ifconfig vr0 xxx.yyy.60.18 netmask 255.255.255.240
 ifconfig vr1 10.10.10.2    netmask 255.255.255.0
 ifconfig vr2 172.16.0.2    netmask 255.255.255.0

 route add default xxx.yyy.60.17

 ifconfig carp0 10.10.10.1    carpnodes 1:0,2:100 balancing ip-stealth
 ifconfig carp1 xxx.yyy.60.21 carpnodes 3:0,4:100 balancing ip-stealth

 pfctl -e -f /etc/pf.conf
 ifconfig pfsync0 syncdev vr2 up

##########################
# Firewall 2's net setup #
##########################
 hostname fw2

 sysctl net.inet.carp.preempt=1
 sysctl net.inet.ip.forwarding=1

 ifconfig pflog0 create up
 ifconfig lo0 127.0.0.1     netmask 255.0.0.0
 ifconfig vr0 xxx.yyy.60.19 netmask 255.255.255.240
 ifconfig vr1 10.10.10.3    netmask 255.255.255.0
 ifconfig vr2 172.16.0.3    netmask 255.255.255.0

 route add default xxx.yyy.60.17

 ifconfig carp0 10.10.10.1    carpnodes 1:100,2:0 balancing ip-stealth
 ifconfig carp1 xxx.yyy.60.21 carpnodes 3:100,4:0 balancing ip-stealth

 pfctl -e -f /etc/pf.conf
 ifconfig pfsync0 syncdev vr2 up


#################
# pf.conf rules #
#################
ext_if  = vr0    # External WAN interface
int_if  = vr1    # Internal LAN interface
pfs_if  = vr2    # Pfsync interface
carp_if = carp1  # External CARP interface

set block-policy drop
set loginterface $ext_if
set skip on lo

scrub in

# NAT outgoing connections
nat on $ext_if inet from !$ext_if to any -> $carp_if

block log all                      # Default deny
block in quick from urpf-failed    # Spoofed address protection

pass quick on $pfs_if proto pfsync keep state (no-sync)      # Enable pfsync
pass on { $int_if, $ext_if } proto carp keep state (no-sync) # Enable CARP

# SSH
pass in on $ext_if inet proto tcp to $ext_if port 2022 flags S/SA keep state

# ICMP
pass in  inet proto icmp all
pass out inet proto icmp all

# DNS
pass in  on $int_if inet proto { tcp, udp } from $int_if:network to any 
port 53
pass out on $ext_if inet proto { tcp, udp } from $carp_if        to any 
port 53
Technical Details
Message-ID: <49D27B17.4040306@hobbydump.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!spln!newsgate.newsguy.com!newsp.newsguy.com!mdrn

Show Full Headers
Complete Article Headers
X-Google-Thread: ff4ef,64e4756efeacd7da,start
X-Google-Attributes: gidff4ef,domainid0,public,usenet
X-Google-Language: ENGLISH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!spln!newsgate.newsguy.com!newsp.newsguy.com!mdrn
From: sheldon@hobbydump.com (Sheldon Jones)
Newsgroups: bit.listserv.openbsd-pf
Subject: Help with NAT to external carp interface
Date: 31 Mar 2009 23:41:30 -0700
Organization: None
Lines: 124
Message-ID: <49D27B17.4040306@hobbydump.com>
NNTP-Posting-Host: unknown
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
NNTP-Posting-Date: 1 Apr 2009 06:41:30 GMT