我打开了一个utun界面,使用下面的命令进行了设置。
sudo ifconfig utun0 10.0.3.1 10.0.3.1 netmask 255.255.255.0 up
sudo route add -net 10.0.3.0 10.0.3.1
sudo sysctl net.inet.ip.forwarding=1
执行 ifconfig lo0、en0 和 utun0 的结果为:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1<PERFORMNUD>
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
ether 95:ab:3d:5c:07:29
inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
media: autoselect (100baseTX <full-duplex,flow-control>)
status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.0.3.1 --> 10.0.3.1 netmask 0xffffff00
执行 netstat -nr 结果是:
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.0.1 UGSc 35 1195 en0
10.0.3/24 10.0.3.1 UGSc 0 0 utun0
10.0.3.1 10.0.3.1 UH 2 0 utun0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 47 45013 lo0
169.254 link#4 UCS 0 0 en0
192.168.0 link#4 UCS 1 0 en0
192.168.0.1/32 link#4 UCS 1 0 en0
192.168.0.1 48:54:70:de:60:09 UHLWIir 36 804 en0 1058
192.168.0.101/32 link#4 UCS 1 0 en0
192.168.0.101 95:ab:3d:5c:07:29 UHLWI 0 82 lo0
192.168.0.103 8e:76:28:93:35:f5 UHLWIi 1 325 en0 1180
224.0.0 link#4 UmCS 1 0 en0
224.0.0.251 a9:d5:8c:80:48:17 UHmLWI 0 0 en0
255.255.255.255/32 link#4 UCS 0 0 en0
Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 UcI lo0
fe80::1%lo0 link#1 UHLI lo0
ff01::%lo0/32 ::1 UmCI lo0
ff02::%lo0/32 ::1 UmCI lo0
现在我可以创建一个 ping 请求数据包,源 IP:10.0.3.1,目标 IP:192.168.0.101,并得到成功回复。但如果我将目标 IP 更改为 127.0.0.1,则不会收到任何回复。
答案1
我通过添加 pf 重定向规则解决了这个问题:
rdr on utun0 from any to 10.0.3.5 -> lo0
然后从 utun 接口 ping 10.0.3.5。我仍然不知道为什么我不能直接 ping 本地主机,而我可以毫无问题地 ping en0 接口。