infra/ansible/roles/general/tasks/udp-gro-fix.yml
2025-08-14 08:03:14 -05:00

64 lines
No EOL
1.7 KiB
YAML

---
# Fix UDP GRO configuration for Tailscale on bridge interfaces
# See https://tailscale.com/s/ethtool-config-udp-gro
- name: Check if ethtool is installed
package:
name: ethtool
state: present
tags:
- network
- tailscale
- name: Get list of bridge interfaces
shell: "ip link show type bridge | grep -E '^[0-9]+:' | cut -d: -f2 | tr -d ' '"
register: bridge_interfaces
changed_when: false
failed_when: false
tags:
- network
- tailscale
- name: Disable UDP GRO on bridge interfaces
command: "ethtool -K {{ item }} rx-udp-gro-forwarding off rx-gro-list off"
loop: "{{ bridge_interfaces.stdout_lines }}"
when: bridge_interfaces.stdout_lines is defined and bridge_interfaces.stdout_lines | length > 0
failed_when: false
changed_when: true
tags:
- network
- tailscale
- name: Create systemd service to persist UDP GRO settings
copy:
dest: /etc/systemd/system/disable-udp-gro@.service
content: |
[Unit]
Description=Disable UDP GRO on %i for Tailscale
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -K %i rx-udp-gro-forwarding off rx-gro-list off
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
owner: root
group: root
mode: '0644'
tags:
- network
- tailscale
- name: Enable systemd service for each bridge interface
systemd:
name: "disable-udp-gro@{{ item }}.service"
enabled: yes
daemon_reload: yes
state: started
loop: "{{ bridge_interfaces.stdout_lines }}"
when: bridge_interfaces.stdout_lines is defined and bridge_interfaces.stdout_lines | length > 0
tags:
- network
- tailscale