Welcome to the arpsponge wiki!
Not much here yet, just a rough TODO / road-map
Feature: switch to disable sweeping of unknown addresses
Right now, we sweep for all addresses that we haven't heard from in a while. For some subnets (e.g. /21 with only active hosts), this will add a boat-load of unnecessary ARP queries. By distinguishing known and unknown ALIVE entries (i.e. those that have a MAC address in the table and those that don't) we can skip probing the unknown ones.
Feature: add possibility to mark IP addresses as "static ALIVE", "static DEAD", or "IGNORE"
- static ALIVE: don't ever sponge this, do update MAC address if packets come in with that source IP. Do query in sweeps, if alive sweeping is enabled.
- static DEAD: don't ever release this address, even if another device starts using this IP.
- IGNORE: don't sponge, query, or answer for this address; pretend it doesn't exist.
Feature: use configuration (YAML) files, instead of shell files & complicated init scripts.
- Put config files in
/etc/arpsponge
instead of/etc/default
. - Have the multiple instances started by either the init script, or the
arpsponge
itself.
For backwards compatibility: if /etc/arpsponge/arpsponge.yml
does not exist, then use the legacy shell-script route.
Otherwise, call arpsponge
with the global config file. The arpsponge
process will read the global config, which may contain a list of interface configurations. Additionally, it will get interface definitions from /etc/arpsponge/arpsponge/interfaces.d/
.
---
dummy_mode: false
init_mode: alive
sponge_network: true
gratuitous: true
passive: false
learning: 60
arp_max_age: 600
logmask: "!alien"
arp_update_method: all
query_rate: 100
rundir: /var/run/arpsponge
sponge_threshold:
queue_depth: 500
rate: 50
pending: 10
sweep:
enabled: true
at_start: true
interval: 900
sweep_dead: true
sweep_alive: false
sweep_unknown: true
age_threshold: 3600
flood_protection:
enabled: enabled
rate: 3.0
For interfaces, there can either be an interfaces
array, or a separate file per interface in the interfaces.d
directory.
---
[...]
interfaces:
- name: eth1.501
interface: eth1.501
network: 80.249.208.0/21
enabled: true
init_mode: alive
learning: 120
- name: eth1.502
network: 193.105.101.0/25
dummy_mode: true
init_mode: alive
sponge_network: false
gratuitous: false
learning: 120
arp_update_method: none
sponge_threshold:
queue_depth: 100
rate: 500
pending: 3
Or (/etc/arpsponge/interfaces.d/eth1.501
):
---
name: eth1.502
network: 193.105.101.0/25
dummy_mode: true
init_mode: alive
sponge_network: false
gratuitous: false
learning: 120
arp_update_method: none
sponge_threshold:
queue_depth: 100
rate: 500
pending: 3