在El Capitan上进行港口转运的现代方式是什么?(将端口80转发到8080)


56

ipfw在最近的Mac OS X版本中不鼓励使用该旧实用程序,而从El Capitan中删除了该实用程序。

在El Capitan中进行端口转发的现代方法是什么?

我只希望端口80转发到端口8080。


请接受答案。
Efren

Answers:


79

要将所有端口80流量转发到端口8080,可以在“终端”命令行中输入以下内容。

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

取自https://salferrarello.com/mac-pfctl-port-forwarding/


1
完美地工作!
阿纳帕姆·贾因

17
并从提到的文章中将其删除sudo pfctl -F all -f /etc/pf.conf,并显示您当前的端口转发规则,sudo pfctl -s nat
Brad Parks

4
请记住,此解决方案不会添加规则,而是替换之前加载的任何其他规则,包括pf.conf文件
erandros

36

在El Capitan转发港口的现代方法是使用pf。在下面的示例中,所有端口80请求都转发到同一主机上的端口8080。请根据您的需要调整重定向。

  1. 创建一个锚文件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
    
  2. 修改文件/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"
    
  3. 解析并测试您的锚文件,以确保没有错误:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. 现在,从以下位置修改/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

7
为什么现在没有简单的命令可以执行此操作了?现在太复杂了。
Dr.Knowitall '16

@klanomath-这可以工作,我可以将端口x转发到127.0.0.1等上的端口y,但是我无法将端口转发到在Paralles桌面上运行的Windows vm,知道吗?这里是我的问题stackoverflow.com/questions/40695684/...
苏德赫ñ

将端口转发到在并行桌面上运行的VM时似乎不起作用
Sudhir N

@sudhir您未成功链接到新问题。默认情况下,为安全起见,Parallels VM对网络不可见。您可以在VM的配置中更改设置以使VM可见。记住,ping您是诊断网络问题的朋友。
罗勒·布尔克


3

要从@ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.