Làm cách nào để buộc truy vấn DNS mặc định hoạt động ở chế độ TCP?


6

Ở Trung Quốc, cái gọi là GFW thường làm ô nhiễm kết quả DNS như

$ dig @8.8.8.8 archive.org 

;; QUESTION SECTION:
;archive.org.           IN  A

;; ANSWER SECTION:
archive.org.        2662    IN  A   159.106.121.75

Đây 159.106.121.75 là một IP giả. Chúng tôi phải sử dụng chế độ TCP cho truy vấn DNS:

$ dig @8.8.8.8 +tcp archive.org

;; QUESTION SECTION:
;archive.org.           IN  A

;; ANSWER SECTION:
archive.org.        237 IN  A   207.241.224.2

Bây giờ chúng ta có được IP thật 207.241.224.2.

Trong Tùy chọn hệ thống - & gt; Mạng , các Nâng cao... nút có thể mở một tab để thiết lập DNS. Tuy nhiên, tôi chỉ có thể thêm địa chỉ IP của máy chủ DNS nhưng không thể làm gì khác. Vì vậy, câu hỏi của tôi là: Làm cách nào tôi có thể buộc truy vấn DNS mặc định hoạt động ở chế độ TCP?

PS : Tôi không muốn sửa đổi /etc/hosts tập tin để khắc phục vấn đề này vì nó bất tiện. Nếu có bất kỳ phương pháp tao nhã nào có thể giải quyết vấn đề này, nó sẽ giúp tôi tiết kiệm nhiều thời gian :) Cảm ơn.

Câu trả lời:


3

AFAIK không thể buộc mDNSResponder sử dụng TCP thay vì UDP.

Tôi đã tìm thấy một cách giải quyết mặc dù. Phương pháp được nêu dưới đây sử dụng proxy DNS cục bộ ( dnschef ) buộc phải sử dụng TCP cho các yêu cầu DNS gửi đi.

  • Tải xuống và giải nén dnschef-0,3 .
  • Tải xuống và giải nén dnslib
  • Tải xuống và không lưu trữ IPy-0,76

  • cd để dnslib thư mục:

    cd ~/Downloads/paulc-dnslib-04713cc4a9df 
    
  • cài đặt, dựng lên dnslib :

    sudo python ./setup.py install
    
  • cd để IPy thư mục:

    cd ~/Downloads/IPy-0.76 
    
  • cài đặt, dựng lên IPy :

    sudo python ./setup.py install
    
  • Tùy chọn hệ thống mở - & gt; Mạng, thay thế (các) máy chủ DNS hiện tại của bạn (ví dụ: 8.8.8.8/8.8.8.4) bằng một máy cục bộ bằng IP 127.0.0.1 và áp dụng các thay đổi.

  • cd để dnschef thư mục và bắt đầu nó:

    cd ~/Downloads/dnschef-0.3 
    sudo ./dnschef.py --nameservers 8.8.8.8#53#tcp
    

Nếu lệnh cuối cùng quá rắc rối hoặc xấu xí (tốt, nó xấu vì bạn phải mở Terminal.app và khởi động DNS-proxy), bạn có thể di chuyển dnschef.py và .ini sang một đường dẫn khác và tạo một trình nền khởi chạy để khởi động DNS-proxy trong khi khởi động.

Thí dụ:

  • sudo mkdir /usr/local/python
  • sudo cp ~/Downloads/dnschef-0.3/dns* /usr/local/python/
  • sudo rm /usr/local/python/dnschef.exe
  • sudo touch /Library/LaunchDaemon/local.dnschef.plist
  • sao chép và dán nội dung sau vào tệp vừa tạo bằng trình chỉnh sửa phù hợp
    (ví dụ sudo nano /Library/LaunchDaemon/local.dnschef.plist ):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>local.dnschef</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/python/dnschef.py</string>
            <string>--nameservers</string>
            <string>8.8.8.8#53#tcp</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>
    
  • Tải tập tin với sudo launchctl load -w /Library/LaunchDaemons/local.dnschef.plist

    Tất cả các tệp và thư mục được tạo phải được sở hữu bởi root: wheel.


Tôi chưa thử nghiệm điều này, nhưng tôi khá chắc chắn rằng bạn sẽ cần báo giá xung quanh 8.8.8.8#53#tcp (trong phiên bản bắt đầu tương tác; tệp .plist trông vẫn ổn).
Gordon Davisson

@GordonDavisson Tôi đã thử nó và trích dẫn (tức là "8.8.8.8 # 53 # tcp") phá vỡ trình nền khởi chạy. Các sudo ./dnschef.py --nameservers 8.8.8.8#53#tcp lệnh hoạt động.
klanomath

Đúng. Báo giá là cần thiết tương tác để giữ cho vỏ khỏi phiên dịch # như một dấu hiệu nhận xét; launchd không sử dụng shell nên không cần trích dẫn ở đó (và như bạn nói, sẽ phá vỡ nó vì không có shell để loại bỏ chúng).
Gordon Davisson

Cảm ơn bạn đã trả lời chi tiết. Chưa thử nhưng tôi hoàn toàn tin rằng nó hoạt động: D
Stan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.