143 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
---
 | 
						|
- 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' }}           |