Answers:
要将所有端口80流量转发到端口8080,可以在“终端”命令行中输入以下内容。
echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -F all -f /etc/pf.conf
,并显示您当前的端口转发规则,sudo pfctl -s nat
pf.conf
文件
在El Capitan转发港口的现代方法是使用pf
。在下面的示例中,所有端口80请求都转发到同一主机上的端口8080。请根据您的需要调整重定向。
创建一个锚文件org.user.forwarding在/private/etc/pf.anchors
sudo touch /private/etc/pf.anchors/org.user.forwarding
具有以下内容和尾随的空行
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
要么
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
修改文件/private/etc/pf.conf,但保留尾随的空行
原始文件:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
至
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "org.user.forwarding"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
解析并测试您的锚文件,以确保没有错误:
sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
现在,从以下位置修改/System/Library/LaunchDaemons/com.apple.pfctl.plist
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
至
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
您必须禁用系统完整性保护才能完成此操作。编辑文件后,重新启用SIP。重新启动后,将启用Mac pf(即-e选项)。
或者,您可以创建自己的启动守护程序,类似于此处的答案:使用Server 5.0.15共享Internet而无需Internet共享。
系统更新或升级后,上面的某些原始文件可能已被替换,您必须重新应用所有更改。
如果要跨不同的接口转发,则必须在/etc/sysctl.conf中启用它:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
ping
您是诊断网络问题的朋友。
要从@ SAL-ferrarello答案扩展的解决方案,我创建了两个超级基本shell脚本来启用或禁用重定向不会影响现有的条目在pf
。
I.首先找到您已经拥有的条目:
sudo pfctl -s nat
我的输出就像:
No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
我们感兴趣的是实际条目,因此省略了前两个信息行。
二。创建enable.sh
脚本:
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat
之后的前两行echo
是已经存在的条目。第三行是新的重定向-在这种情况下是80到8080。最后,我们致电sudo pfctl -s nat
查看是否应用了更改。
三,创建disable.sh
脚本:
与enable.sh
我们创建脚本类似,但是没有80-> 8080重定向,但是具有先前已经存在的条目:
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat