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的机器,新增网络eth1
ip:192.168.188.1
,暂时没有网关 - Mac的机器,新增网络en4
ip: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