For me this minimal setup let me see the drop off of the network from
the
haproxy server.
2 jails, one with haproxy, one with nginx which is using the following
html
file to be served.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
From a remote machine i do a hey -h2 -n 10 -c 10 -z 300s
https://wp.test.nl
Then a ping on the jailhost to the haproxy shows the following
[ /] > ping 10.233.185.20
PING 10.233.185.20 (10.233.185.20): 56 data bytes
64 bytes from 10.233.185.20: icmp_seq=0 ttl=64 time=0.054 ms
64 bytes from 10.233.185.20: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 10.233.185.20: icmp_seq=2 ttl=64 time=0.041 ms
<SNIP>
64 bytes from 10.233.185.20: icmp_seq=169 ttl=64 time=0.050 ms
64 bytes from 10.233.185.20: icmp_seq=170 ttl=64 time=0.154 ms
64 bytes from 10.233.185.20: icmp_seq=171 ttl=64 time=0.054 ms
64 bytes from 10.233.185.20: icmp_seq=172 ttl=64 time=0.039 ms
64 bytes from 10.233.185.20: icmp_seq=173 ttl=64 time=0.160 ms
64 bytes from 10.233.185.20: icmp_seq=174 ttl=64 time=0.045 ms
^C
--- 10.233.185.20 ping statistics ---
335 packets transmitted, 175 packets received, 47.8% packet loss
round-trip min/avg/max/stddev = 0.037/0.070/0.251/0.040 ms
ifconfig
vtnet0: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST>
metric 0
mtu 1500
options=4c00bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6>
ether 56:16:e9:80:5e:41
inet 87.233.191.146 netmask 0xfffffff0 broadcast 87.233.191.159
inet 87.233.191.156 netmask 0xffffffff broadcast 87.233.191.156
inet 87.233.191.155 netmask 0xffffffff broadcast 87.233.191.155
inet 87.233.191.154 netmask 0xffffffff broadcast 87.233.191.154
media: Ethernet autoselect (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
vtnet1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0
mtu 1500
options=4c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6>
ether 56:16:2c:64:32:35
media: Ethernet autoselect (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0
mtu
1500
ether 58:9c:fc:10:ff:82
inet 10.233.185.1 netmask 0xffffff00 broadcast 10.233.185.255
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: epair20a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 7 priority 128 path cost 2000
member: epair18a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 15 priority 128 path cost 2000
groups: bridge
nd6 options=9<PERFORMNUD,IFDISABLED>
bridge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0
mtu
1500
ether 58:9c:fc:10:d9:1a
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: vtnet0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 1 priority 128 path cost 2000
groups: bridge
nd6 options=9<PERFORMNUD,IFDISABLED>
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160
groups: pflog
epair18a: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST>
metric
0 mtu 1500
description: jail_web01
options=8<VLAN_MTU>
ether 02:77:ea:19:c7:0a
groups: epair
media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
epair20a: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST>
metric
0 mtu 1500
description: jail_haproxy
options=8<VLAN_MTU>
ether 02:9b:93:8c:59:0a
groups: epair
media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
jail.conf
# Global settings applied to all jails.
$domain = "test.nl";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.fstab = "/storage/jails/$name.fstab";
exec.system_user = "root";
exec.jail_user = "root";
mount.devfs;
sysvshm="new";
sysvsem="new";
allow.raw_sockets;
allow.set_hostname = 0;
allow.sysvipc;
enforce_statfs = "2";
devfs_ruleset = "11";
path = "/storage/jails/${name}";
host.hostname = "${name}.${domain}";
# Networking
vnet;
vnet.interface = "vnet0";
# Commands to run on host before jail is created
exec.prestart = "ifconfig epair${ip} create up description
jail_${name}";
exec.prestart += "ifconfig epair${ip}a up";
exec.prestart += "ifconfig bridge0 addm epair${ip}a up";
exec.created = "ifconfig epair${ip}b name vnet0";
# Commands to run in jail after it is created
exec.start += "/bin/sh /etc/rc";
# commands to run in jail when jail is stopped
exec.stop = "/bin/sh /etc/rc.shutdown";
# Commands to run on host when jail is stopped
exec.poststop = "ifconfig bridge0 deletem epair${ip}a";
exec.poststop += "ifconfig epair${ip}a destroy";
persist;
web01 {
$ip = 18;
}
haproxy {
$ip = 20;
mount.fstab = "";
path = "/storage/jails/${name}";
}
pf.conf
#######################################################################
ext_if="vtnet0"
table <bruteforcers> persist
table <torlist> persist
table <ssh-trusted> persist file "/usr/local/etc/pf/ssh-trusted"
table <custom-block> persist file "/usr/local/etc/pf/custom-block"
table <jailnetworks> { 10.233.185.0/24, 192.168.10.0/24 }
icmp_types = "echoreq"
junk_ports="{ 135,137,138,139,445,68,67,3222,17500 }"
# Log interface
set loginterface $ext_if
# Set limits
set limit { states 40000, frags 20000, src-nodes 20000 }
scrub on $ext_if all fragment reassemble no-df random-id
# ---- Nat jails to the web
binat on $ext_if from 10.233.185.15/32 to !10.233.185.0/24 ->
87.233.191.156/32 # saltmaste
binat on $ext_if from 10.233.185.20/32 to !10.233.185.0/24 ->
87.233.191.155/32 # haproxy
binat on $ext_if from 10.233.185.22/32 to !10.233.185.0/24 ->
87.233.191.154/32 # web-comb
nat on $ext_if from <jailnetworks> to any -> ($ext_if:0)
# ---- First rule obligatory "Pass all on loopback"
pass quick on lo0 all
pass quick on bridge0 all
pass quick on bridge1 all
# ---- Block TOR exit addresses
block quick proto { tcp, udp } from <torlist> to $ext_if
# ---- Second rule "Block all in and pass all out"
block in log all
pass out all keep state
# IPv6 pass in/out all IPv6 ICMP traffic
pass in quick proto icmp6 all
# Pass all lo0
set skip on lo0
############### FIREWALL
###############################################
# ---- Block custom ip's and logs
block quick proto { tcp, udp } from <custom-block> to $ext_if
# ---- Jail poorten
pass in quick on { $ext_if } proto tcp from any to 10.233.185.22 port
{
smtp 80 443 993 995 1956 } keep state
pass in quick on { $ext_if } proto tcp from any to 10.233.185.20 port
{
smtp 80 443 993 995 1956 } keep state
pass in quick on { $ext_if } proto tcp from any to 10.233.185.15 port
{
4505 4506 } keep state
# ---- Allow ICMP
pass in inet proto icmp all icmp-type $icmp_types keep state
pass out inet proto icmp all icmp-type $icmp_types keep state
pass in quick on $ext_if inet proto tcp from any to $ext_if port { 80,
443
} flags S/SA keep state
pass in quick on $ext_if inet proto tcp from <ssh-trusted> to $ext_if
port
{ 4505 4506 } flags S/SA keep state
block log quick from <bruteforcers>
pass quick proto tcp from <ssh-trusted> to $ext_if port ssh flags S/SA
keep
state
This is as minimal i can get it.
Hope this helps.
regards,
Johan Hendriks
Op za 12 mrt. 2022 om 02:10 schreef Kristof Provost <k...@freebsd.org>:
On 11 Mar 2022, at 18:55, Michael Gmelin wrote:
On 12. Mar 2022, at 01:21, Kristof Provost <k...@freebsd.org> wrote:
On 11 Mar 2022, at 17:44, Johan Hendriks wrote:
On 09/03/2022 20:55, Johan Hendriks wrote:
The problem:
I have a FreeBSD 14 machine and a FreeBSD 13-stable machine, both
running the same jails just to test the workings.
The jails that are running are a salt master, a haproxy jail, 2
webservers, 2 varnish servers, 2 php jails one for php8.0 and one
with 8.1.
All the jails are connected to bridge0 and all the jails use vnet.
I believe this worked on an older 14-HEAD machine, but i did not
do a
lot with it back then, and when i started testing again and after
updating
the OS i noticed that one of the varnish jails lost it's network
connection
after running for a few hours. I thought it was just something on
HEAD so
never really looked at it. But later on when i start using the jails
again
and testing a test wordpress site i noticed that with a simple load
test my
haproxy jail within one minute looses it's network connection. I see
nothing in the logs, on the host and on the jail.
From the jail i can not ping the other jails or the IP adres of
the
bridge. I can however ping the jails own IP adres. From the host i
can also
not ping the haproxy jail IP adres. If i start a tcpdump on the
epaira
interface from the haproxy jail i do see the packets arrive but not
in the
jail.
I used ZFS to send all the jails to a 13-STABLE machine and
copied
over the jail.conf file as well as the pf.conf file and i saw the
same
behavior.
Then i tried to use 13.0-RELEASE-p7 and on that machine i do not
see
this happening. There i can stress test the machine for 10 minutes
without
a problem but on 14-HEAD and 13-STABLE within a minute the jail's
network
connection fails and only a restart of the jail brings it back online
to
exhibit the same behavior if i start a simple load test which it
should
handle nicely.
One of the jail hosts is running under VMWARE and the other is
running under Ubuntu with KVM. The 13.0-RELEASE-p7 jail host is
running
under Ubuntu with KVM
Thank you for your time.
regards
Johan
I did some bisecting and the latest commit that works on FreeBSD
13-Stable is 009a56b2e
Then the commit 2e0bee4c7 if_epair: implement fanout and above is
showing the symptoms described above.
Interestingly I cannot reproduce stalls in simple epair setups.
It would be useful if you could reduce the setup with the problem
into
a minimal configuration so we can figure out what other factors are
involved.
If there are clear instructions on how to reproduce, I’m happy to
help
experimenting (I’m relying heavily on epair at this point).
@Kristof: Did you try on bare metal or on vms?
Both.
Kristof