Tôi đang sử dụng MacBook Pro với OS X Mavericks 10.9.2. Nó kết nối với internet thông qua khóa USB 3G và tôi muốn chia sẻ kết nối internet đó qua wifi. Tuy nhiên, trên các thiết bị kết nối với điểm truy cập wifi đã tạo, tra cứu DNS sẽ không hoạt động (mặc dù tôi có thể ping 8.8.8.8 tốt). Nếu tôi định cấu hình tĩnh các thiết bị để sử dụng 8.8.8.8, mọi thứ đều hoạt động, nhưng không phải mọi thiết bị đều hỗ trợ điều đó (hoặc chỉ khi bạn cũng sẵn sàng định cấu hình IP tĩnh và cổng).
Vấn đề dường như là OS X cấu hình bootp (máy chủ DHCP) để phát địa chỉ máy chủ DNS của chính MacBook:
$ cat /etc/bootp.list
...
<key>dhcp_domain_name_server</key>
<array>
<string>192.168.2.1</string>
</array>
...
Đây thực sự là địa chỉ IP của chính máy:
$ ifconfig
...
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether 02:26:bb:66:19:64
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
...
Và đó là những gì khách hàng đang nhận được trong phản hồi DHCP:
$ sudo tcpdump -vv
15:26:07.265635 IP (tos 0x0, ttl 255, id 9846, offset 0, flags [none], proto UDP (17), length 328)
192.168.2.1.bootps > 192.168.2.2.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 300, xid 0x4e0988af, Flags [none] (0x0000)
Your-IP 192.168.2.2
Server-IP 192.168.2.1
Client-Ethernet-Address 10:bf:48:cc:49:7d (oui Unknown)
sname "ip-77-24-232-37.web.vodafone.de"
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.2.1
Lease-Time Option 51, length 4: 85536
Subnet-Mask Option 1, length 4: 255.255.255.0
Default-Gateway Option 3, length 4: 192.168.2.1
Domain-Name-Server Option 6, length 4: 192.168.2.1
Bây giờ, điều đó sẽ ổn nếu nó thực sự hoạt động như viết ở đây , tức là OS X chạy một liên kết ( named
) chính máy chủ, chỉ chuyển tiếp các yêu cầu và phản hồi DNS tới các máy chủ của ISP.
Tuy nhiên ... sử dụng tcpdump
Tôi có thể thấy rằng máy khách đang nhận được phản hồi lỗi từ tra cứu DNS của nó:
$ sudo tcpdump
15:23:33.181447 IP 192.168.2.2.57291 > 192.168.2.1.domain: 32713+ A? google.com. (28)
15:23:33.181528 IP 192.168.2.1 > 192.168.2.2: ICMP 192.168.2.1 udp port domain unreachable, length 36
Thật vậy, không named
máy chủ đang chạy và dường như nó không được cài đặt:
$ ps aux | grep named
thomas 2175 0.0 0.0 2423368 188 s000 R+ 3:14pm 0:00.00 grep named
$ which named
$
Không có gì khác đang nghe trên cổng UDP 53, mặc dù có một thứ gọi là mDNSResponder trên 5353:
$ sudo lsof -i -P | grep 53
mDNSRespo 47 _mdnsresponder 8u IPv4 0x4dcb7c0f075daa1d 0t0 UDP *:5353
mDNSRespo 47 _mdnsresponder 9u IPv6 0x4dcb7c0f075da835 0t0 UDP *:5353
natpmpd 1664 root 4u IPv4 0x4dcb7c0f064b6f15 0t0 UDP 192.168.2.1:5351
Bây giờ tôi có thể nghĩ ra hai cách để khắc phục điều này, không thực tế lắm:
- Chạy một số máy chủ DNS trên cổng UDP 53. Thật không may, không có cái nào được cài đặt.
- Yêu cầu DHCP phân phát địa chỉ máy chủ DNS thực sự hoạt động, như 8.8.8.8. thật không may
InternetSharing
ghi đè ứng dụng/etc/bootp.plist
mỗi lần chia sẻ internet được bật, vì vậy ngay cả khi tôi đã thêm địa chỉ IP ở đó và ngay cả khi nó hoạt động, nó sẽ không hoạt động mãi mãi.
Nhưng một cái gì đó cho tôi biết rằng cái này nên (và thường không) hoạt động chính xác ra khỏi hộp ... tôi đang thiếu gì?
named
Dịch vụ đang chạy, nhưng tôi có 53 hoạt động. Lưu ý tôi đã xóa giá trị hex khỏi lsofmDNSRespo 42 _mdnsresponder 8u IPv4 0t0 UDP *:5353 mDNSRespo 42 _mdnsresponder 9u IPv6 0t0 UDP *:5353 mDNSRespo 42 _mdnsresponder 64u IPv4 0t0 UDP *:53 mDNSRespo 42 _mdnsresponder 65u IPv6 0t0 UDP *:53 mDNSRespo 42 _mdnsresponder 66u IPv4 0t0 TCP *:53 (LISTEN) mDNSRespo 42 _mdnsresponder 67u IPv6 0t0 TCP *:53 (LISTEN)