--- - name: Network Connectivity and Performance Check hosts: all gather_facts: yes vars: test_domains: - google.com - github.com - docker.io - tailscale.com test_ports: - { host: "8.8.8.8", port: 53, name: "Google DNS" } - { host: "1.1.1.1", port: 53, name: "Cloudflare DNS" } - { host: "github.com", port: 443, name: "GitHub HTTPS" } - { host: "docker.io", port: 443, name: "Docker Hub" } tasks: # 基本网络信息 - name: Get network interfaces shell: ip addr show | grep -E "^[0-9]+:|inet " register: network_interfaces - name: Display network interfaces debug: msg: "🌐 Network Interfaces: {{ network_interfaces.stdout_lines }}" # 检查默认路由 - name: Check default route shell: ip route | grep default register: default_route - name: Display default route debug: msg: "🛣️ Default Route: {{ default_route.stdout }}" # DNS 解析测试 - name: Test DNS resolution shell: nslookup {{ item }} | grep -A2 "Name:" register: dns_test loop: "{{ test_domains }}" failed_when: false - name: Display DNS test results debug: msg: "🔍 DNS Test for {{ item.item }}: {{ 'SUCCESS' if item.rc == 0 else 'FAILED' }}" loop: "{{ dns_test.results }}" # 网络连通性测试 - name: Test network connectivity (ping) shell: ping -c 3 {{ item }} register: ping_test loop: "{{ test_domains }}" failed_when: false - name: Display ping test results debug: msg: "🏓 Ping to {{ item.item }}: {{ 'SUCCESS' if item.rc == 0 else 'FAILED' }}" loop: "{{ ping_test.results }}" # 端口连通性测试 - name: Test port connectivity wait_for: host: "{{ item.host }}" port: "{{ item.port }}" timeout: 5 register: port_test loop: "{{ test_ports }}" failed_when: false - name: Display port test results debug: msg: "🔌 {{ item.item.name }} ({{ item.item.host }}:{{ item.item.port }}): {{ 'SUCCESS' if not item.failed else 'FAILED' }}" loop: "{{ port_test.results }}" # 检查 Tailscale 状态 - name: Check Tailscale status shell: tailscale status register: tailscale_status failed_when: false - name: Display Tailscale status debug: msg: "🔗 Tailscale Status: {{ 'CONNECTED' if tailscale_status.rc == 0 else 'NOT CONNECTED' }}" - name: Show Tailscale details debug: msg: "{{ tailscale_status.stdout_lines }}" when: tailscale_status.rc == 0 # 检查防火墙状态 - name: Check UFW status (Ubuntu/Debian) shell: ufw status register: ufw_status failed_when: false when: ansible_os_family == "Debian" - name: Display UFW status debug: msg: "🛡️ UFW Firewall: {{ ufw_status.stdout_lines }}" when: ansible_os_family == "Debian" and ufw_status.rc == 0 # 检查 iptables 规则 - name: Check iptables rules shell: iptables -L -n | head -20 register: iptables_rules failed_when: false become: yes - name: Display iptables summary debug: msg: "🔥 Iptables Rules: {{ iptables_rules.stdout_lines[:10] }}" when: iptables_rules.rc == 0 # 网络性能测试 - name: Test download speed (small file) shell: curl -o /dev/null -s -w "%{time_total}" http://speedtest.wdc01.softlayer.com/downloads/test10.zip register: download_speed failed_when: false - name: Display download speed test debug: msg: "⚡ Download Speed Test: {{ download_speed.stdout }}s for 10MB file" when: download_speed.rc == 0 # 检查网络统计 - name: Get network statistics shell: cat /proc/net/dev | grep -v "lo:" | grep ":" register: network_stats - name: Display network statistics debug: msg: "📊 Network Stats: {{ network_stats.stdout_lines }}" # 生成网络健康报告 - name: Generate network health summary debug: msg: | 🌐 Network Health Summary for {{ inventory_hostname }}: ✅ DNS Resolution: {{ (dns_test.results | selectattr('rc', 'equalto', 0) | list | length) }}/{{ test_domains | length }} domains ✅ Ping Connectivity: {{ (ping_test.results | selectattr('rc', 'equalto', 0) | list | length) }}/{{ test_domains | length }} hosts ✅ Port Connectivity: {{ (port_test.results | rejectattr('failed', 'defined') | list | length) }}/{{ test_ports | length }} ports ✅ Tailscale: {{ 'Connected' if tailscale_status.rc == 0 else 'Disconnected' }}