diff options
| author | Kyrylo Yatsenko <hedrok@gmail.com> | 2025-08-27 17:49:12 +0300 |
|---|---|---|
| committer | Kyrylo Yatsenko <hedrok@gmail.com> | 2025-09-16 13:00:56 +0300 |
| commit | e992fb4ec3d65674c794bdcb961b62485fec8d50 (patch) | |
| tree | 37431490c991e47d5cea14acf566c200c131f7fd /data | |
| parent | d72d15c28f2e890ded3e5d24fceac00dac1238ed (diff) | |
| download | vyos-1x-e992fb4ec3d65674c794bdcb961b62485fec8d50.tar.gz vyos-1x-e992fb4ec3d65674c794bdcb961b62485fec8d50.zip | |
T75: migrate from pmacct to ipt_NETFLOW
* Change nft to iptables in system_flow-accounting.py as ipt_NETFLOW
is iptales plugin
* Remove specific and non-relevant pmacct options
* Add ipt_NETFLOW options
* Move 'interfaces' to 'netflow' tree
* Support more flexible 'source-address' and 'source-interface' for
each server instead of one source
* Add migration script
* Update op mode command 'show flow-accounting'
* Update op mode command 'restart flow-accounting'
Diffstat (limited to 'data')
| -rw-r--r-- | data/templates/ipt-netflow/ipt_NETFLOW.conf.j2 | 29 | ||||
| -rw-r--r-- | data/templates/pmacct/override.conf.j2 | 17 | ||||
| -rw-r--r-- | data/templates/pmacct/uacctd.conf.j2 | 57 |
3 files changed, 29 insertions, 74 deletions
diff --git a/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2 b/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2 new file mode 100644 index 000000000..116b8c973 --- /dev/null +++ b/data/templates/ipt-netflow/ipt_NETFLOW.conf.j2 @@ -0,0 +1,29 @@ +{% if netflow.engine_id is vyos_defined %} +options ipt_NETFLOW engine-id={{ netflow.engine_id }} +{% endif %} +{% if netflow.max_flows is vyos_defined %} +options ipt_NETFLOW maxflows={{ netflow.max_flows }} +{% endif %} +{% if netflow.sampling_rate is vyos_defined %} +options ipt_NETFLOW sampler=random:{{ netflow.sampling_rate }} +{% endif %} +{% if netflow.server is vyos_defined %} +{% set servers_list = [] %} +{% for server in netflow.server %} +{% set d = netflow.server[server] %} +{% set s = (server | bracketize_ipv6) ~ ':' ~ d['port'] %} +{% set s = s ~ ('%' ~ d['source_interface'] if d['source_interface'] is vyos_defined else '') %} +{% set s = s ~ ('@' ~ d['source_address'] if d['source_address'] is vyos_defined else '') %} +{% set _ = servers_list.append(s) %} +{% endfor %} +options ipt_NETFLOW destination={{ servers_list | join(",") }} +{% endif %} +{% if netflow.version is vyos_defined %} +options ipt_NETFLOW protocol={{ netflow.version }} +{% endif %} +{% if netflow.inactive_timeout is vyos_defined %} +options ipt_NETFLOW inactive_timeout={{ netflow.inactive_timeout }} +{% endif %} +{% if netflow.active_timeout is vyos_defined %} +options ipt_NETFLOW active_timeout={{ netflow.active_timeout }} +{% endif %} diff --git a/data/templates/pmacct/override.conf.j2 b/data/templates/pmacct/override.conf.j2 deleted file mode 100644 index 44a100bb6..000000000 --- a/data/templates/pmacct/override.conf.j2 +++ /dev/null @@ -1,17 +0,0 @@ -{% set vrf_command = 'ip vrf exec ' ~ vrf ~ ' ' if vrf is vyos_defined else '' %} -[Unit] -After= -After=vyos-router.service -ConditionPathExists= -ConditionPathExists=/run/pmacct/uacctd.conf - -[Service] -EnvironmentFile= -ExecStart= -ExecStart={{ vrf_command }}/usr/sbin/uacctd -f /run/pmacct/uacctd.conf -ExecStop=/usr/libexec/vyos/system/uacctd_stop.py $MAINPID 60 -WorkingDirectory= -WorkingDirectory=/run/pmacct -Restart=always -RestartSec=10 -KillMode=mixed diff --git a/data/templates/pmacct/uacctd.conf.j2 b/data/templates/pmacct/uacctd.conf.j2 deleted file mode 100644 index d2de80df4..000000000 --- a/data/templates/pmacct/uacctd.conf.j2 +++ /dev/null @@ -1,57 +0,0 @@ -# Genereated from VyOS configuration -daemonize: true -promisc: false -syslog: daemon -uacctd_group: 2 -uacctd_nl_size: 2097152 -snaplen: {{ packet_length }} -aggregate: in_iface{{ ',out_iface' if enable_egress is vyos_defined }},src_mac,dst_mac,vlan,src_host,dst_host,src_port,dst_port,proto,tos,flows -{% set pipe_size = buffer_size | int *1024 *1024 %} -plugin_pipe_size: {{ pipe_size }} -{# We need an integer division (//) without any remainder or fraction #} -plugin_buffer_size: {{ pipe_size // 1000 }} -{% if syslog_facility is vyos_defined %} -syslog: {{ syslog_facility }} -{% endif %} -{% if disable_imt is not defined %} -imt_path: /tmp/uacctd.pipe -imt_mem_pools_number: 169 -{% endif %} - -{% set plugin = [] %} -{% if netflow.server is vyos_defined %} -{% for server in netflow.server %} -{% set nf_server_key = 'nf_' ~ server | dot_colon_to_dash %} -{% set _ = plugin.append('nfprobe['~ nf_server_key ~ ']') %} -{% endfor %} -{% endif %} -{% if disable_imt is not defined %} -{% set _ = plugin.append('memory') %} -{% endif %} -plugins: {{ plugin | join(',') }} - -{% if netflow.server is vyos_defined %} -# NetFlow servers -{% for server, server_config in netflow.server.items() %} -{# # prevent pmacct syntax error when using IPv6 flow collectors #} -{% set nf_server_key = 'nf_' ~ server | dot_colon_to_dash %} -nfprobe_receiver[{{ nf_server_key }}]: {{ server | bracketize_ipv6 }}:{{ server_config.port }} -nfprobe_version[{{ nf_server_key }}]: {{ netflow.version }} -{% if netflow.engine_id is vyos_defined %} -nfprobe_engine[{{ nf_server_key }}]: {{ netflow.engine_id }} -{% endif %} -{% if netflow.max_flows is vyos_defined %} -nfprobe_maxflows[{{ nf_server_key }}]: {{ netflow.max_flows }} -{% endif %} -{% if netflow.sampling_rate is vyos_defined %} -sampling_rate[{{ nf_server_key }}]: {{ netflow.sampling_rate }} -{% endif %} -{% if netflow.source_address is vyos_defined %} -nfprobe_source_ip[{{ nf_server_key }}]: {{ netflow.source_address | bracketize_ipv6 }} -{% endif %} -{% if netflow.timeout is vyos_defined %} -nfprobe_timeouts[{{ nf_server_key }}]: expint={{ netflow.timeout.expiry_interval }}:general={{ netflow.timeout.flow_generic }}:icmp={{ netflow.timeout.icmp }}:maxlife={{ netflow.timeout.max_active_life }}:tcp.fin={{ netflow.timeout.tcp_fin }}:tcp={{ netflow.timeout.tcp_generic }}:tcp.rst={{ netflow.timeout.tcp_rst }}:udp={{ netflow.timeout.udp }} -{% endif %} - -{% endfor %} -{% endif %} |
