Hi Steve,

Thanks for your reply! I read your thread before I posted this, but since it
applied to a transparent bridge it was a bit hard for me to see if the
solutions applied to my problem.

However, I just fixed my problem by adding a route-to in the firewall rule,
which routes the packet over to the internal interface ($int_if):

FROM:
>> pass in log on {$ext_if $int_if} proto udp from
>> external.sip.proxy.example port sip to internal.sip.proxy.test port
>> 6060 tag VoIP2 keep state

to:

pass in log on {$ext_if $int_if} route-to $int_if proto udp from
external.sip.proxy.example port sip to internal.sip.proxy.test port 6060 tag
VoIP2 keep state

I now see that Mark Pecaut actually wrote the answer for me in his reply to
you, except that I'm routing to $int_if and not lo0.

Best regards,
Andreas


>-----Original Message-----
>From: Steve Williams [mailto:[EMAIL PROTECTED]
>Sent: 9. mai 2007 17:09
>To: Andreas Hdber
>Cc: misc@openbsd.org
>Subject: Re: Redirected packet from pf is lost
>
>Andreas Hdber wrote:
>> Hi all,
>>
>> I've got a Dell SC1435, running OpenBSD 4.0, with two Ethernet
>> interfaces (bge0 and bge1) working as a gateway and firewall
>for our internal network.
>>
>> bge0 is the external connection (with a class B IPv4 address), and
>> bge1 is the internal connection (private IP network, class C). They
>> are both part of a bridge, bridge0:
>> # cat /etc/bridgename.bridge0
>> add bge0
>> add bge1
>> blocknonip bge0
>> blocknonip bge1
>> up
>> #
>>
>> Our pf-config has worked fine for normal Internet access, so
>internal
>> computers can access external hosts fine (through NAT).
>>
>> However, now we need to redirect packets from an external host
>> ("external.sip.proxy.example" below, using a normal class B IPv4
>> address) to one of our internal hosts ("internal.sip.proxy.test"
>> below, which is part of the same private network as bge1 on our
>> gateway). This is the first rdr rule below. I've also used
>"rdr pass"
>> instead of the explicit pass as shown below, obviously with
>no success.
>>
>> The pf-config looks like this (rules related to IPSec, SSH-access are
>> removed):
>> ext_if="bge0"                           # External interface
>> int_if="bge1"                           # Internal interface
>>
>> set block-policy return
>> set loginterface $ext_if
>>
>> set skip on { lo enc0 }
>>
>> scrub in
>>
>> rdr on $ext_if proto udp from external.sip.proxy.example port sip to
>> any port 6060 \
>>     tag VoIP -> internal.sip.proxy.test port 6060
>>
>> nat on $ext_if from !($ext_if) to any -> ($ext_if)
>>
>> nat-anchor "ftp-proxy/*"
>> rdr-anchor "ftp-proxy/*"
>> rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port
>> 8021
>>
>> block in log all
>>
>> pass out keep state
>>
>> anchor "ftp-proxy/*"
>> antispoof quick for { lo enc0 $int_if }
>>
>> # Does NOT work (see tag on rdr-rule above) pass in log
>tagged VoIP #
>> Does work, according to pflog. Tag is nowhere to be seen, though.
>> pass in log on {$ext_if $int_if} proto udp from
>> external.sip.proxy.example port sip to internal.sip.proxy.test port
>> 6060 tag VoIP2 keep state
>>
>> pass quick on { $int_if, enc0 }
>>
>>
>>
>>
>> # -- end pf.conf --
>>
>>
>> As you can see above, I'm logging blocked packets and also the
>> relevant packets passed in. I've found these two packets in
>pflog0 related to this.
>> The first one is a SIP request sent out from internal.sip.proxy.test
>> to
>> external.sip.proxy.example:
>>
>> Frame 205258 (1458 bytes on wire, 1458 bytes captured)
>>     Arrival Time: May  8, 2007 16:58:45.715379000
>>     [Time delta from previous packet: 679.119839000 seconds]
>>     [Time since reference or first frame: 8590.343581000 seconds]
>>     Frame Number: 205258
>>     Packet Length: 1458 bytes
>>     Capture Length: 1458 bytes
>>     [Frame is marked: True]
>>     [Protocols in frame: pflog:ip:udp:sip:sdp] PF Log IPv4 passed on
>> bge1 by rule 46
>>     Header Length: 61
>>     Address Family: IPv4 (2)
>>     Action: passed (0)
>>     Reason: match (0)
>>     Interface: bge1
>>     Ruleset:
>>     Rule Number: 46
>>     Sub Rule Number: -1
>>     Direction: Unknown (255)
>> Internet Protocol, Src: internal.sip.proxy.test (192.168.1.7), Dst:
>> external.sip.proxy.example (external.sip.proxy.example)
>>     Version: 4
>>     Header length: 20 bytes
>>     Differentiated Services Field: 0x10 (DSCP 0x04: Unknown
>DSCP; ECN: 0x00)
>>         0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
>>         .... ..0. = ECN-Capable Transport (ECT): 0
>>         .... ...0 = ECN-CE: 0
>>     Total Length: 1394
>>     Identification: 0x0000 (0)
>>     Flags: 0x04 (Don't Fragment)
>>         0... = Reserved bit: Not set
>>         .1.. = Don't fragment: Set
>>         ..0. = More fragments: Not set
>>     Fragment offset: 0
>>     Time to live: 64
>>     Protocol: UDP (0x11)
>>     Header checksum: 0x622c [correct]
>>         [Good: True]
>>         [Bad : False]
>>     Source: internal.sip.proxy.test (192.168.1.7)
>>     Destination: external.sip.proxy.example
>> (external.sip.proxy.example) User Datagram Protocol, Src
>Port: 6060 (6060), Dst Port: 5060 (5060)
>>     Source port: 6060 (6060)
>>     Destination port: 5060 (5060)
>>     Length: 1374
>>     Checksum: 0x1eac [correct]
>> Session Initiation Protocol
>>     Request-Line: INVITE sip:[EMAIL PROTECTED] SIP/2.0
>>         Method: INVITE
>>         [Resent Packet: False]
>> [Snipped away rest of the SIP-content!]
>>
>>
>> The external.sip.proxy.example sends the following response
>back Frame
>> 205259 (805 bytes on wire, 805 bytes captured)
>>     Arrival Time: May  8, 2007 16:58:45.716547000
>>     [Time delta from previous packet: 0.001168000 seconds]
>>     [Time since reference or first frame: 8590.344749000 seconds]
>>     Frame Number: 205259
>>     Packet Length: 805 bytes
>>     Capture Length: 805 bytes
>>     [Frame is marked: True]
>>     [Protocols in frame: pflog:ip:udp:sip] PF Log IPv4
>passed on bge0
>> by rule 14
>>     Header Length: 61
>>     Address Family: IPv4 (2)
>>     Action: passed (0)
>>     Reason: match (0)
>>     Interface: bge0
>>     Ruleset:
>>     Rule Number: 14
>>     Sub Rule Number: -1
>>     Direction: Unknown (255)
>> Internet Protocol, Src: external.sip.proxy.example
>> (external.sip.proxy.example), Dst: internal.sip.proxy.test
>(192.168.1.7)
>>     Version: 4
>>     Header length: 20 bytes
>>     Differentiated Services Field: 0x10 (DSCP 0x04: Unknown
>DSCP; ECN: 0x00)
>>         0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
>>         .... ..0. = ECN-Capable Transport (ECT): 0
>>         .... ...0 = ECN-CE: 0
>>     Total Length: 741
>>     Identification: 0x0000 (0)
>>     Flags: 0x04 (Don't Fragment)
>>         0... = Reserved bit: Not set
>>         .1.. = Don't fragment: Set
>>         ..0. = More fragments: Not set
>>     Fragment offset: 0
>>     Time to live: 63
>>     Protocol: UDP (0x11)
>>     Header checksum: 0x65b9 [correct]
>>         [Good: True]
>>         [Bad : False]
>>     Source: external.sip.proxy.example (external.sip.proxy.example)
>>     Destination: internal.sip.proxy.test (192.168.1.7) User Datagram
>> Protocol, Src Port: 5060 (5060), Dst Port: 6060 (6060)
>>     Source port: 5060 (5060)
>>     Destination port: 6060 (6060)
>>     Length: 721
>>     Checksum: 0xbc55 [correct]
>> Session Initiation Protocol
>>     Status-Line: SIP/2.0 300 Redirect
>>         Status-Code: 300
>>         [Resent Packet: False]
>> [Rest of SIP-content is snipped away...]
>>
>>
>> As can be seen in the frame just above (Frame 205259), pf passes the
>> frame on by the pass-in rule from above (rule number 14 because some
>> rules related to IPSec & SSH-access has been removed). So,
>my question
>> is sipmly where will this packet end up now?
>>
>> I'm also logging traffic at bge0, bge1 and bridge0, in addition to
>> pflog0. I see these packets on bge0 as well, before the
>rdr-rule has come into effect.
>> Also expected to see the response-packet on bge1 but, alas, that's
>> nowhere to be seen.
>>
>> Thanks for any insight to help me solve this issue!
>>
>> Best regards,
>> Andreas Hdber
>>
>Hi,
>
>Check out a (very) recent thread initiated by myself with the
>subject "rdr on bridge interface possible? (squid transparent
>proxy on bridge)".
>
>There are a few suggestions there, none of which have worked
>for me.  I have no idea why it's not working for me.
>
>Let me know if you get it working!
>
>Cheers,
>Steve Williams

Reply via email to