Hi,

You need to tell PF to intercept packets and redirect them to the relayd
process.

pass in on em2 inet proto tcp to any port www divert-to 192.168.20.1 port
8000
pass out log(all) on em1 divert-reply

You can find some more detailed information regarding relayd transparent
proxying in this thread:
http://marc.info/?l=openbsd-misc&m=130479125318862&w=2

After reloading PF, keep in mind that you have to change your test, i.e.:
connect to
your server on port 80, not port 8000.

Marios.


On 27 March 2012 15:18, Schmurfy <[email protected]> wrote:

> Hi,
> I am trying to forward port using relayd which works but what I really need
> is transparent relaying and I cannot make that one works :/
>
> I have one OpenBSD 5.0 server with two network card (em0 can be ignored):
> - em1: 192.168.33.10/24
> - em2: 192.168.20.1/24
>
> And another machine acting as server:
> - em1: 192.168.33.11/24
>
> My computer (client) is connected to the server on em2 and the server and
> router are connected with their em1 interfaces, the server use the router
> as its default route.
>
> Here is my working configuration in non transparent mode:
> pf.conf:
> set skip on lo
> anchor "relayd/*"
> pass # to establish keep-state
>
>
> relayd.conf:
> relay banana {
>  listen on "192.168.20.1" port 8000
>  forward to "192.168.33.11" port 80
> }
>
>
>
> After restarting relayd I connect with "curl http://192.168.20.1:8000"; and
> I get the page served by the server machine, eveything is fine.
>


> Now I tried switching to a transparent relay, I added this in pf.conf:
> pass out log(all) on em1 divert-reply
>
> and my relayd.conf now looks like this:
> relay banana {
>  listen on "192.168.20.1" port 8000
>  transparent forward to "192.168.33.11" port 80 interface em1
> }
>
>
> After restarting relayd and reloading pf.conf if I start curl again I
> successfully connects to the relayd process but it never even tries to
> connect to the http server on the server machine :/
>
> I did some tests to ensure the routing was correct and the SO_BINDANY
> option was working by running this command on the router:
> nc -s 192.168.20.254 192.168.33.11 80
>
> When I do this it connects and if I type "GET /" it returns the web page
> and the server sees a connection from 192.168.20.254 so it seems to work.
>
>
> For some reason relayd cannot open the socket but I have no idea why...
> relayd logging is not very helpful, I managed to force it in debug mode and
> I got this:
>
> proc_dispatch: parent 1 got imsg 42 from relay 4
> proc_dispatch: relay 1 got imsg 42 from parent 0
> relay_dispatch_parent: session 1: expired
> proc_dispatch: pfe 1 got imsg 39 from relay 4
> # (previous line repeated a lot of time)
>
> relay banana, session 1 (1 active), 0, 192.168.20.254 -> :80, bindany
> failed, invalid socket
> # (after the previous line the connection with curl is closed)
>
> proc_dispatch: pfe 1 got imsg 39 from relay 4
> # (previous line repeated until I hit Ctrl+C)
>
> Any idea why relayd would fails to establish the connection ? I am now
> digging into the relayd sources trying to find something helpful but not
> much luck for now.
>
> Thanks for any help, it's really driving me crazy...

Reply via email to