Skip to main content
Version: 2.7.3

Simulate Network Faults

This document introduces how to use Chaosd to simulate network faults. The simulations can be completed by modifying network routing and traffic flow control using iptables, ipsets, tc, etc.

info

Make sure the NET_SCH_NETEM module is installed in the Linux kernel. If you are using CentOS, you can install the module through the kernel-modules-extra package. Most other Linux distributions have installed it already by default.

Before creating an experiment, you can run the following command to check the types of network faults supported by Chaosd:

chaosd attack network --help

Currently, you can simulate the following experimental scenarios using Chaosd: network corruption, network latency, network duplication, network loss, network partition, DNS fault, network bandwidth limitation, port occupation, NIC down, and network flood.

To create experiments using the service mode, you need to run Chaosd in the service mode and then send a POST HTTP request to the /api/attack/network path of the Chaosd service:

chaosd server --port 31767
curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{fault-configuration}'

For the fault-configuration part in the above command, you need to configure it according to the fault types. For the corresponding parameters and examples, refer to the parameters of each fault type in the following sections.

info

When running an experiment, remember to record the UID of the experiment. When you want to end the experiment corresponding to the UID, you need to send a DELETE HTTP request to the /api/attack/{uid} path of the Chaosd service.

Simulate network corruption​

Parameters for simulating network corruption​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "corrupt"
correlationccorrelationThe correlation between the percentage of current corrupt occurrence and the previous occurrence.stringIt is a percentage ranging from 0 to 100 (10 is 10%) ("0" by default).
deviceddeviceName of the impacted network interface card.stringSuch as "eth0", required.
egress-porteegress-portThe egress traffic that only impacts specific destination ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".
hostnameHhostnameThe host name impacted by traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressThe IP address impacted by egress traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "123.123.123.123".
protocolpip-protocolThe IP protocol impacted by traffic.stringSupported protocols: tcp, udp, icmp, all (all network protocols).
source-portssource-portThe egress traffic which only impact specific source ports. It can only be configured when the protocol is TCP or UDP.stringUse a , to delimit the specific port or to indicate the range of the ports, such as "80,8001:8010".
percentN/ApercentRatio of network packet corruption.stringIt is a percentage which range is 0 to 100 (10 is 10%) (default "1").

Simulate network corruption using the command-line mode​

You can run the command below to see the configuration of simulated network corruption using Chaosd.

The command for network corruption​

The command is as follows:

chaosd attack network corrupt --help

Example for simulating network corruption using the command mode​

Run the following command to simulate network corruption:

chaosd attack network corrupt -d eth0 -i 172.16.4.4 --percent 50

Simulate network corruption using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"corrupt","device":"eth0","ip-address":"172.16.4.4","percent":"50"}'

Simulate network latency​

Parameters for simulating network latency​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "delay"
correlationccorrelationThe correlation between the current latency and the previous one.stringIt is a percentage ranging from 0 to 100 (10 is 10%) ("0" by default).
deviceddeviceName of the impacted network interface card.stringSuch as "eth0", required.
egress-porteegress-portThe egress traffic which only impact specific destination ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".
hostnameHhostnameThe host name impacted by traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressThe IP address impacted by egress traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "123.123.123.123".
jitterjjitterRange of the length of network delay time.stringThe time units can be: ns, us (µs), ms, s, m, h, such as "1ms".
latencyllatencyLength of network delay time.stringThe time units can be: ns, us (µs), ms, s, m, h, such as "1ms".
protocolpip-protocolThe IP protocol impacted by traffic.stringIt supports the following protocol types: "tcp", "udp", "icmp", "all" (all network protocols).
source-portssource-portThe egress traffic that only impacts specified source ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".

Simulate network latency using the command-line mode​

You can run the command below to see the configuration of simulated network latency using Chaosd.

The command for network latency​

The command is as follows:

chaosd attack network delay --help

Example for simulating network latency using the command-line mode​

Run the following command to simulate network latency:

chaosd attack network delay -d eth0 -i 172.16.4.4 -l 10ms

Simulate network latency using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"delay","device":"eth0","ip-address":"172.16.4.4","latency":"10ms"}'

Simulate network duplication​

Parameters for simulating network duplication​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "duplicate"
correlationccorrelationThe correlation between the percentage of current duplication occurrence and the previous one.stringIt is a percentage which range is 0 to 100 (10 is 10%) (default "0").
deviceddeviceName of the impacted network interface card.stringSuch as "eth0", required.
egress-porteegress-portThe egress traffic that only impacts specified destination ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".
hostnameHhostnameThe host name impacted by traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressThe IP address impacted by egress traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "123.123.123.123".
percentN/ApercentRatio of network packet duplicate.stringIt is a percentage which range is 0 to 100 (10 is 10%) (default "1").
protocolpip-protocolThe IP protocol impacted by traffic.stringIt supports the following protocol types: "tcp", "udp", "icmp", "all" (all network protocols).
source-portssource-portThe egress traffic which only impact specific source ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".

Simulate network duplication using the command-line mode​

You can run the command below to see the configuration of simulated network duplication using Chaosd.

The command for network duplication​

The command is as follows:

chaosd attack network duplicate --help

Example for simulating network duplication using the command-line mode​

Run the following command to simulate network duplication:

chaosd attack network duplicate -d eth0 -i 172.16.4.4 --percent 50

Simulate network duplication using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"duplicate","ip-address":"172.16.4.4","device":"eth0","percent":"50"}'

Simulate network loss​

Parameters for simulating network loss​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "loss"
correlationccorrelationThe correlation between the percentage of the current network loss and the previous one.stringIt is a percentage which range is 0 to 100 (10 is 10%) (default "0").
deviceddeviceName of the impacted network interface card.stringSuch as "eth0", required.
egress-porteegress-portThe egress traffic that only impacts specified destination ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".
hostnameHhostnameThe host name impacted by traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressThe IP address impacted by egress traffic. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "123.123.123.123".
percentN/ApercentRatio of network packet loss.stringIt is a percentage which range is 0 to 100 (10 is 10%) (default "1").
protocolpip-protocolOnly impact traffic using this IP protocol.stringIt supports the following protocol types: "tcp", "udp", "icmp", "all" (all network protocols).
source-portssource-portThe egress traffic which only impact specific source ports. It can only be configured when the protocol is TCP or UDP.stringYou need to use a , to separate the specific port or to indicate the range of the port, such as "80,8001:8010".

Simulate network loss using the command-line mode​

You can run the command below to see the configuration of simulated network loss using Chaosd:

The command for network loss​

The command is as follows:

chaosd attack network loss --help

Example for simulating network loss using the command-line mode​

Run the following command to simulate network loss:

chaosd attack network loss -d eth0 -i 172.16.4.4 --percent 50

Simulate network loss using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"loss","ip-address":"172.16.4.4","device":"eth0","percent":"50"}'

Simulate network partition​

Parameters for simulating network partition​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "partition"
accept-tcp-flagsN/Aaccept-tcp-flagsOnly the packet which matches the tcp flag can be accepted, others will be dropped. Only set when the protocol is tcp.stringSuch as "SYN,ACK SYN,ACK".
deviceddeviceThe network interface to impactstringSuch as "eth0", required.
directionN/AdirectionSpecifies the partition direction, values can be 'to', 'from' or 'both'. 'from' means packets coming from the 'ip' or 'hostname' and going to your server, 'to' means packets originating from your server and going to the 'ip' or 'hostname'.stringValues can be "to", "from" or "both" (default "both").
hostnameHhostnameOnly impact traffic to these hostnames. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressOnly impact egress traffic to these IP addresses. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "192.168.123.123".
protocolpip-protocolOnly impact traffic using this IP protocolstringIt supports the following protocol types: "tcp", "udp", "icmp", "all" (all network protocols).

Simulate network partition using the command-line mode​

You can run the command below to see the configuration of simulated network partition using Chaosd.

The command for network partition​

The command is as follows:

chaosd attack network partition --help

Example for simulating network partition using the command-line mode​

Run the following command to simulate network partition:

chaosd attack network partition -i 172.16.4.4 -d eth0 --direction from

Simulate network partition using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"partition","ip-address":"172.16.4.4","device":"eth0","direction":"from"}'

Simulate DNS fault​

Parameters for simulating DNS fault​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "dns"
dns-domain-nameddns-domain-nameMap this host to specified IP (dns-ip)stringSuch as "chaos-mesh.org".
dns-ipidns-ipMap specified host (dns-domain-name) to this IP addressstringSuch as "123.123.123.123".
dns-serverN/Adns-serverUpdate the DNS server in /etc/resolv.conf with this valuestringDefault is "123.123.123.123".

Simulate DNS fault using the command-line mode​

You can run the command below to see the configuration of simulated DNS fault using Chaosd.

The command for DNS fault​

The command is as follows:

chaosd attack network dns --help

Example for simulating DNS fault using the command-line mode​

Run the following command to simulate DNS fault by mapping specified host to specified IP:

chaosd attack network dns --dns-ip 123.123.123.123 --dns-domain-name chaos-mesh.org

Run the following command to simulate DNS fault by using wrong DNS server:

chaosd attack network dns --dns-server 123.123.123.123

Simulate DNS fault using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"dns","dns-domain-name":"chaos-mesh.org","dns-ip":"123.123.123.123"}'

Simulate network bandwidth​

Parameters for simulating network bandwidth​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "bandwidth"
bufferbbufferThe maximum amount of bytes that tokens can be available for instantaneouslyuint32Such as 10000, required.
deviceddeviceThe network interface to impactstringSuch as "eth0", required.
hostnameHhostnameOnly impact traffic to these hostnames. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "chaos-mesh.org".
ipiip-addressOnly impact egress traffic to these IP addresses. hostname and ip cannot be empty at the same time. When hostname and ip are set at the same time, the configuration item affects both the specified hostname and ip.stringSuch as "123.123.123.123".
limitllimitThe number of bytes that can be queued waiting for tokens to become availableuint32Such as 10000, required.
minburstmminburstSpecifies the size of the peakrate bucketuint32Such as 10000.
peakrateN/ApeakrateThe maximum depletion rate of the bucketuint64Such as 10000.
raterrateThe speed knob, allows bps, kbps, mbps, gbps, tbps unit. The bps unit means bytes per second.stringSuch as "1mbps", required.

Simulate network bandwidth using the command-line mode​

You can run the command below to see the configuration of simulated network bandwidth using Chaosd.

The command for network bandwidth​

The command is as follows:

chaosd attack network bandwidth --help

Example for simulating network bandwidth using the command-line mode​

Run the following command to simulate network bandwidth:

chaosd attack network bandwidth --buffer 10000 --device eth0 --limit 10000 --rate 10mbps

Simulate network bandwidth using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"bandwidth","buffer":10000,"limit":10000,"rate":"10mbps","device":"eth0"}'

Simulate port occupation​

Parameters for simulating port occupation​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "occupied"
portpportThe specified port to be occupiedstringSuch as "8080", required.

Simulate port occupation using the command-line mode​

You can run the command below to see the configuration of simulated port occupation.

The command for port occupation​

The command is as follows:

chaosd attack network port --help

Example for simulating port occupation using the command-line mode​

Run the following command to simulate port occupation:

chaosd attack network port --port 8080

Simulate port occupation using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"occupied","port":"8080"}'

Simulate NIC down​

Parameters for simulating NIC down​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "down".
deviceddeviceName of the network interface card to bring down.stringsuch as "eth0", required.
durationN/AdurationDuration before Chaosd automatically brings the NIC back up.stringsuch as "30s", required.

Simulate NIC down using the command-line mode​

You can run the command below to see the configuration of simulated NIC down using Chaosd.

chaosd attack network down --help

Run the following command to bring down the NIC:

chaosd attack network down -d eth0 --duration 30s

Simulate NIC down using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"down","device":"eth0","duration":"30s"}'

Simulate network flood​

info

Install iperf 2 on the physical node running Chaosd and on the target host. On the target host, run iperf -s -u -p 5001 to start a UDP server for the examples below.

Parameters for simulating network flood​

Configuration itemAbbreviationService mode fieldDescriptionTypeValue
action—actionAction of the experiment.stringSet to "flood".
durationN/AdurationDuration of the traffic generation, in seconds.stringsuch as "30", required.
ipiip-addressIP address of the iperf server that receives the UDP traffic.stringsuch as "172.16.4.4", required.
parallelN/AparallelNumber of parallel iperf client streams.int32such as 1.
portpportPort of the iperf server.stringsuch as "5001", required.
raterrateUDP traffic rate in iperf syntax.stringsuch as "10M", required.

Simulate network flood using the command-line mode​

You can run the command below to see the configuration of simulated network flood using Chaosd.

chaosd attack network flood --help

Run the following command to generate UDP traffic using iperf:

chaosd attack network flood -i 172.16.4.4 -p 5001 -r 10M --duration 30

Simulate network flood using the service mode​

curl -X POST 172.16.112.130:31767/api/attack/network -H "Content-Type:application/json" -d '{"action":"flood","ip-address":"172.16.4.4","port":"5001","rate":"10M","parallel":1,"duration":"30"}'