一台Mac,一台Linux,相互做NAT来访问背后的网络

0x01 基本情况

我们经常会使用一根网线连接两台电脑,让两台电脑相通。但是,如何让一台电脑可以访问另一台电脑背后的网络呢。特别的,如果一台是Linux,一台是Mac,如何让其互相能够访问背后的网络呢?这就是我今天搞了一上午的成果。

先来看看我们什么都没做的时候的网络拓扑结构:

  • 一台Linux的电脑,有两块网卡,其中一块网卡eth0连接内网,分配的地址如下ip:192.168.132.131,gw:192.168.132.2,另外一块eth1暂时闲置。这台机器处于内网,我厂的内网网段为182.0.0.0/8,内网DNS为182.119.172.49
  • 一台Mac电脑,也有两块网卡(其中一块就是WIFI啦)。en0(WIFI)分配的地址如下ip:172.31.85.126,gw:172.31.80.1,另外一块en4暂时闲置。这台机器可以上互联网

OK,介绍完基本情况,来完成我们的目标。

0x02 双机互联

这部分没什么好说的,因为两台机器空闲的网卡都是有线网卡,直接找一根网线将双方连接。配置网络时,我们当然要让其处于同一个网段,比如,我们使用192.168.188.0/24这个网段,配置完之后的情况

  • Linux的机器,新增网络eth1ip:192.168.188.1,暂时没有网关
  • Mac的机器,新增网络en4ip:192.168.188.2,也暂时没有网关

互相ping一下,保证双机之间已经互通了。

0x03 配置Linux机器,使Mac可以访问Linux所在的内网

因为这台Linux的机器初始时的责任是访问内网(别急,后期变成了访问外网),因此,我们首先需要查看其路由表的默认网关,在命令行中键入route -n,我们应该可以看到

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.132.2   0.0.0.0         UG    0      0        0 eth1

0.0.0.0表示默认网关设置

当然,也有可能在特殊情况下,表现为

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
182.0.0.0       192.168.132.2   255.0.0.0       UG    0      0        0 eth0

因为我们的内网是182.0.0.0/8,该情况说明182.0.0.0/8是通过192.168.132.2这个网关走的

首先,打开Linux的ip_forward。

sudo echo "1">/proc/sys/net/ipv4/ip_forward

也可以编辑/etc/sysctl,去掉ip_forward的注释,用sudo sysctl -p来永久生效

之后启用NAT地址转换

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

NAT地址转换的目的是让来自于另外一台机器的IP包,看似来自与本机

这时候,切换到Mac,增加路由表信息

sudo route add 182.0.0.0/8 192.168.188.1

意思就是要到182的包去192.168.188.1网络漫游去

这时候,ping一下内网某IP,应该通了。也可以配置内网的DNS,访问内网的域名看看。

0x04 配置Mac,使Linux可以访问Mac所在的互联网

其实很长时间都卡在这里,因为这里需要使用Mac的pfctl来做NAT。

首先,还是一样,打开Mac的ip_forward

sudo sysctl -w net.inet.ip.forwarding=1
sudo sysctl -w net.inet.ip.fw.enable=1

之后启动NAT地址转换,在/etc/pf.anchors下新增一个文件,名称随意,比如nat-rules,在里面写入

nat on en0 from en4:network to any ->(en0)

运行pfctl命令使其生效

# 停止pf
pfctl -d
# 清空所有记录,可选
pfctl -F all
# 加载配置并生效
pfctl -f ./nat-rules -e

转到Linux端。因为我们的目的是Linux机器也可以上互联网,同时也能过访问182.0.0.0/8的内网,因此更改Linux的路由表

# 删除默认的路由
sudo route del default gw 192.168.132.2
# 增加新的默认路由,即Mac这台机器
sudo route add default gw 192.168.188.2
# 增加特殊访问内网路由
route add -net 182.0.0.0/8 gw 192.168.132.2 eth0

ping一下114.114.114.114,应该通了。访问一下外网,也应该没有问题。搞定。

0x05 总结

当然,Mac也可以通过共享网络的方式,让Linux访问互联网。但之所以我这么做,一个是试用一下pfctl,一个是对于802.1X的WIFI,Mac无法共享,只能通过NAT解决了。

Show Comments