오랫동안 저를 괴롭혀 온 문제가 하나 있습니다.
- 저는 macOS 파워 유저입니다. macOS에는 Surge for Mac 같은 훌륭한 소프트웨어가 있어서 거의 모든 네트워크 문제를 쉽게 해결할 수 있었습니다.
하지만 이 문제는 Windows나 Linux에서는 좀 더 복잡해집니다. 그렇다고 Windows나 Linux를 쓰지 않을 수는 없습니다.
모든 시스템에 일일이 소프트웨어를 설치하고 설정 파일을 작성하고 싶지는 않습니다.
그래서 최선의 방법은 Surge for Mac을 프록시 서버로 사용해 다른 기기의 네트워크를 관리하는 것입니다.
저는 학교의 대규모 내부망 안에 있어서 Mac의 IP를 고정 IP로 설정할 수 없습니다. 그래서 이 방식을 유지하려면 Mac의 IP 주소를 계속 갱신해야 합니다.
ChatGPT의 도움을 받아 Mac의 IP 주소를 자동으로 가져와 PAC(Proxy Auto-Config) 설정 파일을 생성하고, 제 클라우드 드라이브에 업로드하는 스크립트를 작성했습니다. 다른 기기에서는 설정 파일 주소만 입력하면 됩니다.
아래 코드를
generate_pac.sh로 저장합니다. 이 스크립트는 같은 디렉터리에proxy.pac파일을 생성하고, Alist의 WebDAV 기능을 이용해 클라우드 드라이브에 업로드합니다.Shell#!/bin/zsh cd /Users/jayden/proxy_pac # 保证环境变量的一致以成功获取到 ip 地址。 PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin rm -f proxy.pac # Get the local IP address from interface en0 (commonly used for Wi-Fi) LOCAL_IP=$(ipconfig getifaddr en0) # Proxy ports HTTP_PROXY_PORT=6152 SOCKS_PROXY_PORT=6153 # PAC file path PAC_FILE="proxy.pac" # Generate the PAC file cat <<EOL > $PAC_FILE function FindProxyForURL(url, host) { var http_proxy = "PROXY $LOCAL_IP:$HTTP_PROXY_PORT"; var socks_proxy = "SOCKS5 $LOCAL_IP:$SOCKS_PROXY_PORT"; // Add your proxy rules here if (shExpMatch(host, "*.example.com")) { return "DIRECT"; // Direct connection } // Default to using HTTP proxy return http_proxy + "; " + socks_proxy; } EOL echo "PAC file generated at $PAC_FILE" >> proxy_pac.log # Upload the PAC file to Alist via WebDAV curl -X DELETE https://pan.xxu.do/dav/path/to/proxy.pac -u username:password curl -T $PAC_FILE https://pan.xxu.do/dav/path/to/proxy.pac -u username:password echo "PAC file generated and uploaded to Alist" >> proxy_pac.log date >> proxy_pac.logcron 작업을 하나 설정합니다.
Shellcrontab -e그런 다음 이 줄을 맨 끝에 추가합니다(매시간 30분에 한 번 실행되며, 필요에 따라 값을 수정하면 됩니다).
CRON30 * * * * /Users/jayden/proxy_pac/generate_pac.sh