Total Pageviews

Wednesday 11 October 2017

一台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解决了.

No comments:

Post a Comment