> Sent: Saturday, April 07, 2018 at 5:02 AM
> From: "Ayaka Koshibe" <akosh...@gmail.com>
> To: "Aham Brahmasmi" <aham.brahma...@gmx.com>
> Cc: misc@openbsd.org
> Subject: Re: Cannot access internet with virtual switch
>
> On Fri, Apr 6, 2018 at 4:40 PM, Aham Brahmasmi <aham.brahma...@gmx.com> wrote:
> > Hello misc,
> >
> > Problem
> > A physical server with a switch (add em0 up) cannot access the internet.
> > However, the same host with a bridge (add em0 up) can access the
> > internet.
> >
> > Steps
> > $ ifconfig
> > em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
> >         lladdr 22:22:22:22:22:22
> >         index 1 priority 0 llprio 3
> >         groups: egress
> >         media: Ethernet autoselect (1000baseT full-duplex,master)
> >         status: active
> >         inet 20.20.20.20 netmask 0xffffff00 broadcast 20.20.20.255
> > ...
> > $ doas route -n show
> > Routing tables
> >
> > Internet:
> > Destination     Gateway            Flags   Refs      Use   Mtu  Prio Iface
> > default         20.20.20.1         UGS        0     1XXX     -     8 em0
> > 224/4           127.0.0.1          URS        0        0 32768     8 lo0
> > 127/8           127.0.0.1          UGRS       0        0 32768     8 lo0
> > 127.0.0.1       127.0.0.1          UHhl       1        X 32768     1 lo0
> > 20.20.20/24     20.20.20.20        UCn        1      9XX     -     4 em0
> > 20.20.20.1      33:33:33:33:33:33  UHLch      1     1XXX     -     3 em0
> > 20.20.20.20     44:44:44:44:44:44  UHLl       0        X     -     1 em0
> > 20.20.20.255    20.20.20.20        UHb        0        0     -     1 em0
> > $ ping 8.8.8.8
> > PING 8.8.8.8 (8.8.8.8): 56 data bytes
> > 64 bytes from 8.8.8.8: icmp_seq=0 ttl=61 time=x.xxx ms
> > ...
> > $ doas ifconfig switch0 create
> > $ doas ifconfig switch0 add em0
> > $ doas ifconfig switch0 up
> > $ ping 8.8.8.8
> > PING 8.8.8.8 (8.8.8.8): 56 data bytes
> > ^C
> > --- 8.8.8.8 ping statistics ---
> > 31 packets transmitted, 0 packets received, 100.0% packet loss
> 
> Hi,
> 
> Seems you haven't started switchd(8), or connected your switch to it
> -- it shouldn't forward traffic until you do so.


Hi Koshibe-san,

Thank you for your reply.

I have started switchd and connected to it. However, I still cannot
ping 8.8.8.8. Starting switchd in debug mode results in output which
broadly says error and closes the switch.

Steps (after the above switch0 up)
$ cat /etc/switchd.conf
listen on 0.0.0.0 tls port 6633
$ doas switchd -dvvvv
listen on 0.0.0.0 6633

(On another session)
$ switchctl connect /dev/switch0

(Back to main session)
ofrelay_input_done: ...
/dev/switch0 > any: ...
switch_learn: ...
packet_input: ...
any > /dev/switch0: ...
(above block repeated multiple times)
...
ofrelay_input_done: connection 1.1: 76 bytes from switch 1
0401004c 00000013 00020004 040d00a9 00000013 ffffffff 00000001 00100000
00000000 00000010 ffffffff ffff0000 00000000 00c88be2 d687ac1f 6b2e22ce
8100026f 08004500 006f42d2
/dev/switch0 > any: version 1_3 type ERROR length 76 xid 19
        error type BAD_ACTION code 4
ofp13_input: message not supported: ERROR
ofrelay_close: connection 1.1 closed
switch_remove: switch 1 removed.

(Another session)
$ tail -10 /var/log/messages
Apr 9 XX:XX:XX MachineName /bsd: arp: attempt to add entry for GATEWAY_IP
on em0 by XX:XX:XX:XX:XX:XX on tap0
(above message repeated infrequently)

If it helps in any way, this machine is a dedicated/bare-metal machine
on a large dedicated/bare-metal machine provider's network. The em0
interface is in the egress group, has a public IP and is connected to
the internet via the provider's network equipment.

The end goal in using the switch is to enable multiple OpenBSD VM's with
with non-contiguous public IPs to be connected to the Internet as real
hosts. In https://www.openbsd.org/faq/faq6.html#VMMnet, this is the
Option 4, except using a switch instead of a bridge and public IPs
on the host network.

Regards,
ab
---------|---------|---------|---------|---------|---------|---------|--

> 
> > $ ifconfig
> > em0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> 
> > mtu 1500
> >         lladdr 22:22:22:22:22:22
> >         index 1 priority 0 llprio 3
> >         groups: egress
> >         media: Ethernet autoselect (1000baseT full-duplex,master)
> >         status: active
> >         inet 20.20.20.20 netmask 0xffffff00 broadcast 20.20.20.255
> > switch0: flags=41<UP,RUNNING>
> >         index 6 llprio 3
> >         groups: switch
> >         datapath xxxxxxxxxxxxxxxxxx maxflow 10000 maxgroup 1000
> >         em0 flags=0<>
> >                 port 1 ifpriority 0 ifcost 0
> > ...
> > $ doas route -n show
> > Routing tables
> >
> > Internet:
> > Destination     Gateway            Flags   Refs      Use   Mtu  Prio Iface
> > default         20.20.20.1         UGS        0     1XXX     -     8 em0
> > 224/4           127.0.0.1          URS        0        0 32768     8 lo0
> > 127/8           127.0.0.1          UGRS       0        0 32768     8 lo0
> > 127.0.0.1       127.0.0.1          UHhl       1        X 32768     1 lo0
> > 20.20.20/24     20.20.20.20        UCn        1      9XX     -     4 em0
> > 20.20.20.1      33:33:33:33:33:33  UHLch      1     1XXX     -     3 em0
> > 20.20.20.20     44:44:44:44:44:44  UHLl       0        X     -     1 em0
> > 20.20.20.255    20.20.20.20        UHb        0        0     -     1 em0
> > $ doas ifconfig switch0 destroy
> > $ ping 8.8.8.8
> > PING 8.8.8.8 (8.8.8.8): 56 data bytes
> > 64 bytes from 8.8.8.8: icmp_seq=0 ttl=61 time=x.xxx ms
> >
> > Repeating the above steps with bridge0 does let the ping pass through
> > after the bridge is brought up. The only delta between the switch and
> > bridge output is in the ifconfig.
> > $ ifconfig
> > bridge0: flags=41<UP,RUNNING>
> >         index 8 llprio 3
> >         groups: bridge
> >         priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto 
> > rtsp
> >         em0 flags=3<LEARNING,DISCOVER>
> >                 port 1 ifpriority 0 ifcost 0
> > ...
> >
> > I have run "doas route -n monitor" in a separate session while doing
> > this. However, I cannot comprehend the output. pf is not involved -
> > running tcpdump -nettti pflog0 with the catchall "block log" produces
> > the normal output of blocked packets with the bridge. However, it stops
> > producing the normal output of blocked packets with the switch. Once the
> > switch is destroyed, it is back to normal blocked packets output.
> >
> > What am I doing wrong/missing? The only thing that stands out to me is
> > the em0 flags=0<> line in the ifconfig for the switch. And I do not know
> > what to make of it.
> >
> > Regards,
> > ab
> > ---------|---------|---------|---------|---------|---------|---------|--
> >
> 

Reply via email to