Tôi cũng đã phải làm một điều tương tự gần đây, và trong khi tìm kiếm câu trả lời này. Thật không may, câu trả lời về việc sử dụng Nafe ipfw
hiện không được chấp nhận và không có sẵn trong OSX; và câu trả lời của Kevin Leary thực sự là một chút hackish. Vì vậy, tôi đã phải làm một cái gì đó tốt hơn (sạch hơn) và quyết định chia sẻ nó ở đây cho hậu thế. Câu trả lời này phần lớn dựa trên cách tiếp cận được đề cập tại ý chính này .
Như OP đề cập, việc chỉ một trình duyệt ở 192.168.99.100 sẽ nhận được phản hồi từ máy chủ tại localhost: 8000. Thêm một bí danh ifconfig
là không thực sự cần thiết, pfctl
một mình là đủ: để đạt được điều này, pf.conf
tập tin /etc/pf.conf
cần phải được sửa đổi.
Đầu tiên chúng ta tạo (với sudo) một tệp neo mới (hãy gọi nó redirection
) tại : /etc/pf.anchors/redirection
. Đây về cơ bản là một tệp văn bản thông thường và chứa dòng sau (giống như trong câu trả lời của Kevin Leary) : rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Khi tệp neo mới đã được tạo, nó cần được tham chiếu trong pf.conf
tệp. Mở pf.conf
tệp bằng sudo và thêm rdr-anchor "redirection"
vào sau dòng neor cuối cùng (đó là rdr-anchor "com.apple/*"
) và thêm load anchor "redirection" from "/etc/pf.anchors/redirection"
vào cuối.
Cuối cùng, đây là tệp pf.conf trông như thế nào:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection" #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding
Và đó gần như là nó. Chỉ cần khởi động lại pfctl
bằng cách phát hành sudo pfctl -d
để vô hiệu hóa nó trước và sau đó sudo pfctl -fe /etc/pf.conf
bắt đầu lại.
Bây giờ, nếu bạn cần điều này tự động xảy ra sau mỗi lần khởi động lại, một công việc nhỏ khác cần phải được thực hiện: trình nền khởi chạy cho pfctl
nhu cầu cần được cập nhật (ý chính tham chiếu đề cập rằng pf được bật tự động khi khởi động, tuy nhiên điều này dường như không phải là trường hợp từ việc nhìn vào mã). Mở (với sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist
và tìm kiếm điều này:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
và thêm dòng <string>-e</string>
để cuối cùng làm cho nó như thế này:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Nên làm vậy.
Hãy cẩn thận : Apple không còn cho phép thay đổi các tệp quỷ khởi chạy giống như vậy (không phải với sudo, cũng không phải chmod, cũng không phải bất cứ thứ gì khác). Cách duy nhất là sửa lại cài đặt Bảo vệ toàn vẹn hệ thống : khởi động vào chế độ khôi phục và khởi chạy thiết bị đầu cuối. Kiểm tra trạng thái SIP với csrutil status
, nó thường sẽ được kích hoạt. Vô hiệu hóa nó với csrutil disable
và khởi động lại trong chế độ bình thường và sau đó thực hiện các thay đổi cho tệp plist như đã thảo luận ở trên. Sau khi hoàn tất, hãy quay lại chế độ khôi phục và bật lại bảo vệ (vì lý do chính đáng) bằng cách ban hành csrutil enable
.
Giải thích: Người ta có thể kiểm tra bằng cách phát ifconfig
lệnh đã 127.0.0.1
là bí danh (mặc định) cho localhost lo0 - thực tế này đang được sử dụng để tránh phải thêm một bí danh bổ sung cho localhost và chỉ cần sử dụng địa chỉ mặc định trong pf.conf
tệp.
CẬP NHẬT: Thật không may, có vẻ như việc tải tệp khi khởi động không hoạt động. Tôi vẫn đang cố gắng để được giúp đỡ để sắp xếp nó. Cho đến lúc đó, chạy sudo pfctl -f /etc/pf.conf
sau khi khởi động không có mẹo.