PythonPig's Blog 移动通信 TCP/IP Hacker 后渗透 伪码农

配置Linux成为路由器

2021-03-07
PythonPig

刚接触网路的时候将Linux配置成路由器轻车熟路,隔了几年时间竟然有点忘了,在这里做个简单的记录,纪念那些逝去的时光~~~
how to configure linux as a router

图片来源于https://devconnected.com/how-to-configure-linux-as-a-static-router/

#0x00 路由和NAT

这里先理解一下路由和NAT。
所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,在此过程中不修改IP层及上层数据包内容。
所谓“NAT”,网络地址转换,就是替换IP报文头部的地址信息,在此过程中需要修改IP数据包的内容。
传统的家用路由器默认开启了路由模式和nat模式,但这是两个不同的概念,很多时候路由模式和nat模式单独使用。

#0x01 Linux配置成路由器(全模式)

这里的Linux以Ubuntu14.04为例进行介绍。
本次使用的网络环境如下图所示 network structure 1

Win10作为客户端,Ubuntu作为待配置路由器,Win10和Ubuntu出处同一个网段(10.100.100.1/24)可互通
Ubuntu通过Eth1与Win10互通,通过Eth0连接Router,进而连接互联网
Router配置了全模式(路由和nat),inside地址192.168.81.1/24

在不改变Router配置的前提下使Win10通过Ubuntu连接互联网,需要在Ubuntu上进行路由配置和nat配置:
1、Ubuntu路由配置
打开Ubuntu的路由转发功能即可。

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

2、Ubuntu配置nat

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

满足从eth0出去的数据包进行nat转换(MASQUERADE表示动态确定nat后的源ip地址,即数据包从eth0转发出去时,nat后的源ip为eth0的地址)。
3、Ubuntu配置iptables规则允许通行相应规则的数据包

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

允许eth0和eth1之间的数据包交换(有些操作系统的FORWARD规则默认是ACCEPT,这种情况下则不需要执行“3”的操作)。
配置完成后在Win10上ping 114.114.114.114,在Ubuntu抓包如下图: wireshark1

#0x02 Linux配置成路由器(路由模式)

这里的Linux还是以Ubuntu14.04为例进行介绍。
本次使用的网络环境如下图所示 network structure 2

Win10作为客户端,Ubuntu作为待配置路由器,Win10和Ubuntu出处同一个网段(10.100.100.1/24)可互通
Ubuntu通过Eth1与Win10互通,通过Eth0连接Router,进而连接互联网
Router配置了全模式(路由和nat),inside地址192.168.81.1/24

Ubuntu只配置路由功能,不做nat,这种情况下Win10的数据包到达Router时的源地址是10.100.100.2,经过目的nat后到达互联网,但是Router无法将回程数据包直接路由至Win10,因此,需要在Router上添加一条静态路由。Ubuntu和Router的配置过程如下:

1、Ubuntu路由配置
打开Ubuntu的路由转发功能即可。

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

2、Ubuntu配置iptables规则允许通行相应规则的数据包

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

允许eth0和eth1之间的数据包交换(有些操作系统的FORWARD规则默认是ACCEPT,这种情况下则不需要执行“2”的操作)。
3、Router上添加一条静态路由

route add -host 10.100.100.2 gw 192.168.81.9

目的地址是Win10的数据包的下一跳指向Ubuntu的Eth0。

#0x03 知识点

1、libpcap与netfilter

关于libpcap是否可以抓到netfilter过滤的数据包问题,可以从数据包的流向上简单的理解:

NIC -> tcpdump/libpcap -> netfilter/iptables
iptables -> tcpdump/libpcap -> NIC 

2、路由器的路由和nat

关于路由器(如思科路由器)路由功能和nat功能谁先谁后的问题,可以简单的做如下理解:

inside --> routing --> nat --> outside
outside --> nat --> routing --> inside

参考


Comments

Content