实际场景


公司项目中遇到一个场景:Ubuntu的主机上装了个4G卡(USB模式),需要将这个4G网共享给一个AP,使得所有连接AP的移动设备都可以通过4G上外网

方法很简单:

1. 将4G网口之外的另一个网口(eth0,也就是Ubuntu上用于连接AP的网口)设置网络共享
具体操作:在设置eth0的IPV4界面,选择共享网络到其它电脑即可
2. AP设置界面将连接eth0的以太网口设置为WAN模式

ICS拓展


对于Ubuntu的网络共享(ICS)在Ubuntu的官网讲的很明白,也就是说在Ubuntu14之后就不需要配置复杂的iptables等参数就可以实现共享

那么ICS的实质是什么呢?百科的叙述可以参考下,类似于一个虚拟的路由器(可以让一个局域网通过唯一的外网出口访问外网)

ICS即Internet连接共享(InternetConnectionSharing)的英文简称,是Windows系统针对家庭网络或小型的Intranet网络提供的一种Internet连接共享服务。
它实际上相当于一种网络地址转换器,所谓网络地址转换器就是当数据包向前传递的过程中,可以转换数据包中的IP地址和TCP/UDP端口等地址信息。
有了网络地址转换器,家庭网络或小型的办公网络中的电脑就可以使用私有地址,并且通过网络地址转换器将私有地址转换成ISP分配的单一的公用IP地址从而实现对Internet的连接。
ICS方式也称之为Internet转换连接。

虽然百科说的是windows系统,但其实Ubuntu14之后也借鉴并实现了此功能。百科里所说的地址转换是关键

Ubuntu的网络共享-LMLPHP

从图中可以看到该主机至少需要两个网口,如果只有一个网口,则可以通过交换机实现ICS(这个笔者还没有实践过)

配置完之后,其实主机就相当于一个WAN的来源,当然局域网的其它计算机也需要把IP设置为自动获取。

再参考维基百科

Internet Connection Sharing (ICS) is a Windows service that enables one Internet-connected computer to share its Internet connection with other computers 
on a local area network (LAN).
The computer that shares its Internet connection serves a gateway device, meaning that all traffic between other computers and the Internet
go through this computer.
ICS provides Dynamic Host Configuration Protocol (DHCP) and network address translation (NAT) services for the LAN computers.

维基说的更直白,此主机作为一个gateway,DHCP,NAT服务给局域网

ICS的使用场景


1. 拨号上网共享(比如ADSL,PPPoE,ISDN等)

2. 光纤上网共享

3. 移动网络共享(比如4G)

4. VPN共享

ICS vs. NAT


相对而言,NAT应用的更加广泛,就像这篇文章所说:ICS is a "poor man's" version of NAT. (ICS是NAT的一个简单版本)

http://www.examnotes.net/index.php?topic=1005828.0;wap2

一句话总结:ICS适用于小型网络,配置更简单,更多的可以参考

https://blog.csdn.net/lidongying/article/details/764421

相关命令


其实在Ubuntu14之前,ICS的实现都是通过配合和命令做到的。当然,现在图形化的背后也是这些命令的作用,这里探讨一条命令

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

iptables命令对于Ubuntu是非常重要的,这里只说明跟本条命令相关的参数

# Abstract structure of an iptables instruction:
iptables [-t table] command [match pattern] [action] -t 表示选择哪个路由表,可选择的是filter,nat,mangle,raw
filter是默认,包括三个内建链:INPUT(接受外部数据),OUTPUT(向外发送数据),FORWARD(转给内部其它网卡)
nat,包括三个内建链:PREROUTING,POSTROUTING,OUTPUT (为什么NAT要使用POSTROUTING?因为替换源地址就是在这里完成)
-o 表示制定网络出口的网卡,这里制定的ethX也就是连接internet的网口
-j 执行目标(jump to target)MASQUERADE是需要配合POSTROUTING一起使用完成地址替换

也就是说这条命令完成的是数据包的转发和源地址的替换,这也是NAT的核心所在。

再延伸:TCP包的发送传输机制(未完待续...)


参考:

https://www.karlrupp.net/en/computer/nat_tutorial

https://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html

05-14 18:40