Files
macos-tools/wireguard/verify_docker_github.sh
bruno 6ebfb24fd9 fix: Update runner Docker socket configuration and Gitea instance URL
- Changed docker-compose.yml to mount OrbStack Docker socket path (/Users/brunogao/.orbstack/run/docker.sock)
- Updated GITEA_INSTANCE_URL to use 192.168.1.83:33000 instead of gitea:3000 for proper DNS resolution
- Both runner-docker and runner-k8s now correctly point to OrbStack Docker daemon
- This resolves the 'Cannot connect to the Docker daemon' error and DNS resolution failures
2025-11-13 17:59:28 +08:00

326 lines
9.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Docker和GitHub连接验证脚本
# 用于测试是否能通过WireGuard正常访问Docker Hub和GitHub
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[✓]${NC} $1"
}
print_error() {
echo -e "${RED}[✗]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[!]${NC} $1"
}
# 测试计数器
PASSED=0
FAILED=0
WARNING=0
# 检查WireGuard状态
check_wg_status() {
echo "=================================================="
print_status "1. 检查WireGuard隧道状态"
echo "=================================================="
if sudo wg show wg0 &>/dev/null; then
print_success "WireGuard接口wg0正在运行"
# 显示详细信息
WG_INFO=$(sudo wg show wg0)
echo "$WG_INFO" | grep -E "interface|peer|endpoint|latest handshake|transfer" | while read line; do
print_status " $line"
done
((PASSED++))
echo ""
return 0
else
print_error "WireGuard接口wg0未运行"
print_warning "请先运行: ./setup_wireguard.sh"
((FAILED++))
echo ""
return 1
fi
}
# 检查路由表
check_routes() {
echo "=================================================="
print_status "2. 检查网络路由"
echo "=================================================="
# 检查默认路由
DEFAULT_ROUTE=$(netstat -rn | grep "^default" | head -1)
print_status "默认路由: $DEFAULT_ROUTE"
# 检查WireGuard路由
WG_ROUTES=$(netstat -rn | grep wg0 | head -5)
if [ -n "$WG_ROUTES" ]; then
print_success "WireGuard路由已配置"
echo "$WG_ROUTES" | while read line; do
print_status " $line"
done
((PASSED++))
else
print_warning "未找到WireGuard路由"
((WARNING++))
fi
echo ""
}
# 检查DNS解析
check_dns() {
echo "=================================================="
print_status "3. 检查DNS解析"
echo "=================================================="
# 检查GitHub解析
print_status "解析 github.com..."
GITHUB_IP=$(dig +short github.com @223.5.5.5 | head -1)
if [ -n "$GITHUB_IP" ]; then
print_success "GitHub DNS解析成功: $GITHUB_IP"
((PASSED++))
else
print_error "GitHub DNS解析失败"
((FAILED++))
fi
# 检查Docker Hub解析
print_status "解析 registry-1.docker.io..."
DOCKER_IP=$(dig +short registry-1.docker.io @223.5.5.5 | head -1)
if [ -n "$DOCKER_IP" ]; then
print_success "Docker Hub DNS解析成功: $DOCKER_IP"
((PASSED++))
else
print_error "Docker Hub DNS解析失败"
((FAILED++))
fi
echo ""
}
# 测试GitHub连接
test_github_connectivity() {
echo "=================================================="
print_status "4. 测试GitHub连接"
echo "=================================================="
# 测试HTTPS连接
print_status "测试GitHub HTTPS (github.com)..."
if curl -I -s --connect-timeout 10 --max-time 15 https://github.com 2>&1 | head -1 | grep -q "200\|301\|302"; then
print_success "GitHub HTTPS连接正常"
((PASSED++))
else
print_error "GitHub HTTPS连接失败"
((FAILED++))
fi
# 测试API连接
print_status "测试GitHub API (api.github.com)..."
API_RESPONSE=$(curl -s --connect-timeout 10 --max-time 15 https://api.github.com/zen 2>/dev/null || echo "failed")
if [ "$API_RESPONSE" != "failed" ] && [ -n "$API_RESPONSE" ]; then
print_success "GitHub API连接正常: $API_RESPONSE"
((PASSED++))
else
print_error "GitHub API连接失败"
((FAILED++))
fi
# 测试SSH连接
print_status "测试GitHub SSH (git@github.com)..."
SSH_TEST=$(timeout 10 ssh -T -o StrictHostKeyChecking=no -o ConnectTimeout=10 git@github.com 2>&1 || true)
if echo "$SSH_TEST" | grep -q "successfully authenticated"; then
print_success "GitHub SSH认证成功"
((PASSED++))
elif echo "$SSH_TEST" | grep -q "Permission denied"; then
print_warning "GitHub SSH连接成功但未配置密钥(正常)"
((WARNING++))
else
print_warning "GitHub SSH连接测试失败(如无SSH密钥则正常)"
((WARNING++))
fi
# 测试Git克隆速度
print_status "测试Git克隆速度..."
TMP_DIR="/tmp/git_speed_test_$$"
START_TIME=$(date +%s)
if timeout 60 git clone --depth 1 https://github.com/github/gitignore.git "$TMP_DIR" &>/dev/null; then
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
print_success "Git克隆成功,耗时: ${DURATION}秒"
rm -rf "$TMP_DIR"
((PASSED++))
else
print_error "Git克隆失败或超时"
rm -rf "$TMP_DIR" 2>/dev/null || true
((FAILED++))
fi
echo ""
}
# 测试Docker连接
test_docker_connectivity() {
echo "=================================================="
print_status "5. 测试Docker连接"
echo "=================================================="
if ! command -v docker &>/dev/null; then
print_warning "Docker未安装,跳过Docker测试"
((WARNING++))
echo ""
return 0
fi
# 检查Docker运行状态
print_status "检查Docker守护进程..."
if docker info &>/dev/null; then
print_success "Docker守护进程运行正常"
((PASSED++))
else
print_error "Docker守护进程未运行"
print_warning "请启动Docker Desktop"
((FAILED++))
echo ""
return 1
fi
# 测试Docker Hub连接
print_status "测试Docker Hub连接 (拉取alpine镜像)..."
START_TIME=$(date +%s)
if timeout 120 docker pull alpine:latest 2>&1 | grep -q "Downloaded\|Image is up to date\|Status: Downloaded newer image"; then
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
print_success "Docker Hub连接正常,耗时: ${DURATION}秒"
((PASSED++))
# 清理测试镜像
docker rmi alpine:latest &>/dev/null || true
else
print_error "Docker Hub连接失败或超时"
((FAILED++))
fi
# 测试其他镜像仓库
print_status "测试其他镜像仓库 (hello-world)..."
if timeout 60 docker pull hello-world:latest &>/dev/null; then
print_success "镜像仓库连接正常"
docker rmi hello-world:latest &>/dev/null || true
((PASSED++))
else
print_warning "镜像仓库连接较慢或失败"
((WARNING++))
fi
echo ""
}
# 测试出口IP
test_exit_ip() {
echo "=================================================="
print_status "6. 检查出口IP地址"
echo "=================================================="
print_status "检测当前出口IP (IPv4)..."
EXIT_IP=$(curl -s --max-time 10 https://api.ipify.org 2>/dev/null || echo "检测失败")
if [ "$EXIT_IP" != "检测失败" ]; then
print_success "出口IP (IPv4): $EXIT_IP"
((PASSED++))
else
print_error "无法检测出口IP"
((FAILED++))
fi
print_status "检测当前出口IP (IPv6)..."
EXIT_IP_V6=$(curl -s --max-time 10 https://api64.ipify.org 2>/dev/null || echo "检测失败")
if [ "$EXIT_IP_V6" != "检测失败" ]; then
print_success "出口IP (IPv6): $EXIT_IP_V6"
((PASSED++))
else
print_warning "无法检测IPv6出口IP(可能未启用IPv6)"
((WARNING++))
fi
# 检测位置
print_status "检测IP地理位置..."
LOCATION=$(curl -s --max-time 10 "https://ipapi.co/$EXIT_IP/json/" 2>/dev/null | grep -o '"country_name":"[^"]*' | cut -d'"' -f4 || echo "未知")
if [ "$LOCATION" != "未知" ] && [ -n "$LOCATION" ]; then
print_success "位置: $LOCATION"
else
print_status "位置: 未知"
fi
echo ""
}
# 生成报告
generate_report() {
echo "=================================================="
echo " 测试结果汇总"
echo "=================================================="
echo ""
print_success "通过测试: $PASSED"
print_warning "警告项目: $WARNING"
print_error "失败测试: $FAILED"
echo ""
TOTAL=$((PASSED + FAILED + WARNING))
if [ $TOTAL -gt 0 ]; then
SUCCESS_RATE=$((PASSED * 100 / TOTAL))
print_status "成功率: ${SUCCESS_RATE}%"
fi
echo ""
if [ $FAILED -eq 0 ]; then
print_success "所有关键测试通过!Docker和GitHub可以通过WireGuard正常访问。"
echo ""
print_status "建议:"
echo " - 定期运行此脚本检查连接状态"
echo " - 如遇到问题,可运行 ./check-tunnel.sh 进行详细诊断"
else
print_error "部分测试失败,请检查配置。"
echo ""
print_status "故障排查步骤:"
echo " 1. 确保WireGuard运行: sudo wg show wg0"
echo " 2. 检查路由配置: netstat -rn | grep wg0"
echo " 3. 重启WireGuard: ./stop_wireguard.sh && ./setup_wireguard.sh"
echo " 4. 如果是Docker问题,重启Docker Desktop"
echo " 5. 运行完整诊断: ./check-tunnel.sh"
fi
echo ""
echo "=================================================="
}
# 主函数
main() {
echo ""
echo "=================================================="
echo " Docker和GitHub WireGuard连接验证"
echo "=================================================="
echo ""
check_wg_status || exit 1
check_routes
check_dns
test_exit_ip
test_github_connectivity
test_docker_connectivity
generate_report
}
main "$@"