Em 05-02-2014 07:09, Tomoyuki Sakurai escreveu:
> hi misc,
>
> i'm trying to run OpenBSD with two default gateways, one for openvpn and
> another for everything else. openvpn is in rdomain 1 and everything works 
> fine.
>
> OpenBSD 5.5-beta (GENERIC.MP) #284: Mon Feb  3 07:57:32 MST 2014
>     t...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>
> # cat hostname.em1
> !echo "starting em1"
> rdomain 1
> group vpn
> inet yy.yy.yy.yy/28
> !/sbin/route -T 1 add default yy.yy.yy.default
> !echo -n "starting sshd in rdomain 1"
> !route -T 1 exec /etc/rc.d/sshd start && echo "."
> !echo -n "starting openvpn in rdomain 1"
> !install -d -o _openvpn -g _openvpn -m 0755 /var/run/openvpn &&
> /sbin/route -T 1 exec /usr/local/sbin/openvpn --daemon --config
> /etc/openvpn/server.conf && echo "."
>
> # cat hostname.tun0
> !echo "starting tun0"
> up
> 10.100.16.1 10.100.16.2 netmask 0xffffffff
> !route add 10.100.16.0/24 10.100.16.2
>
> however, openvpn cannot be restarted in multi-user mode. it hangs in
> get_default_gateway().
>
> http://www.openssh.com/cgi-bin/cvsweb/ports/net/openvpn/patches/patch-src_openvpn_route_c?rev=1.2;content-type=text%2Fplain
>
> ktrace shows that read(2) to routing socket does not return.
>
>  10068 openvpn  CALL  socket(PF_ROUTE,SOCK_RAW,0)
>  10068 openvpn  RET   socket 3
>  10068 openvpn  CALL  sigprocmask(SIG_BLOCK,~0<>)
>  10068 openvpn  RET   sigprocmask 0<>
>  10068 openvpn  CALL  mprotect(0x10ee093000,0x2000,0x3<PROT_READ|PROT_WRITE>)
>  10068 openvpn  RET   mprotect 0
>  10068 openvpn  CALL  mprotect(0x10ee093000,0x2000,0x1<PROT_READ>)
>  10068 openvpn  RET   mprotect 0
>  10068 openvpn  CALL  sigprocmask(SIG_SETMASK,0<>)
>  10068 openvpn  RET   sigprocmask ~0x10100<SIGKILL|SIGSTOP>
>  10068 openvpn  CALL  write(0x3,0x10ee1949c0,0x80)
>  10068 openvpn  GIO   fd 3 wrote 128 bytes
>        
> "\M^@\0\^E\^D\0\0\0\0\0\0\0\0\^E\0\0\0\^C\0\0\0\0\0\0\0\0\0\0\0\^A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
>         
> \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^P\^B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^P\^B\
>         \0\0\0\0\0\0\0\0\0\0\0\0\0\000"
>  10068 openvpn  RET   write 128/0x80
>  10068 openvpn  CALL  sigprocmask(SIG_BLOCK,~0<>)
>  10068 openvpn  RET   sigprocmask 0<>
>  10068 openvpn  CALL  mprotect(0x10ee093000,0x2000,0x3<PROT_READ|PROT_WRITE>)
>  10068 openvpn  RET   mprotect 0
>  10068 openvpn  CALL  mprotect(0x10ee093000,0x2000,0x1<PROT_READ>)
>  10068 openvpn  RET   mprotect 0
>  10068 openvpn  CALL  sigprocmask(SIG_SETMASK,0<>)
>  10068 openvpn  RET   sigprocmask ~0x10100<SIGKILL|SIGSTOP>
>  10068 openvpn  CALL  read(0x3,0x10ee1949c0,0x260)
>
> when invoked from hostname.em1 during boot, read(2) immediately returned with
> ESRCH. according to route(4), messages written to the socket should be
> returned. how can read(2) be blocked?
> the behavior is same on 5.4, 5.3 and current.
>
I've used rdomains, but not for this. In this case I would use mpath and
pf only. I really do not see the need for using rdomains in this case.
It introduces too much complexity for a simple thing.

Cheers,

-- 
Giancarlo Razzolini
GPG: 4096R/77B981BC

Reply via email to