实际场景


公司项目中遇到一个场景: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之后也借鉴并实现了此功能。百科里所说的地址转换是关键

从图中可以看到该主机至少需要两个网口,如果只有一个网口,则可以通过交换机实现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

Ubuntu的网络共享的更多相关文章

  1. ubuntu 10.10配置NFS网络共享步骤

    安装好交叉编译环境arm-linux-gcc之后,就开始配置NFS网络共享,用于不同的linux主机与目标机之间文件的共享.如果是windows和linux的共享则需用samba服务. NFS(Net ...

  2. Virtualbox之Ubuntu虚拟机网络访问设置

    在本机(Win7)中 利用VirtualBox安装了一个Ubuntu虚拟机,由于使用桥接,所以本机和虚拟机处于同一个网络局域网下,,主机能访问虚拟机.可是在Ubuntu更新软件的时候才发现不能联网.首 ...

  3. 网络共享服务(三)之SAMBA

    前面说到了FTP和NFS,由于FTP是客户端和服务器基于ftp应用协议进行交换数据的,它不支持挂载共享目录的方式,而NFS又不支持跨平台,所以就催生了第三种网络共享服务:samba Samba是在Li ...

  4. 安卓手机USB网络共享,电脑卡顿、反应慢

    1.首先需要把手机连接到电脑,在手机上打开USB网络共享. 2.打开设备管理器 3.在网络适配器中,找到Remote NDIS based Internet Sharing Device,右键更新驱动 ...

  5. Windows网络共享权限设置

    文件共享权限有两种权限设置,只要理解这两种权限设置就可以在域控灵活运用. 第一种是网络共享权限 共享权限是控制用户通过网络访问共享文件夹的手段,共享权限仅当用户通过网络访问时才有效,本地用户不受此权限 ...

  6. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

    Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...

  7. C# 带用户密码访问网络共享

    原文:C# 带用户密码访问网络共享 调用WNetUseConnection API 函数详细参数参考:https://msdn.microsoft.com/en-us/library/windows/ ...

  8. VS2010在网络共享目录使用IntelliSense、ipch、sdf和SQL Compact Server相关问题

    Microsoft SQL Compact Server 是专用于 Visual Studio 的单机SQL 数据库.数据库文件名的后缀为SDF. 而VS2010 拒绝在网络共享目录中建立和打开SDF ...

  9. Android-蓝牙的网络共享与连接分析

    一.概述 本次分析是基于android7.0的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接. 二.蓝牙的网络共享 1. 网络共享部分源码分析 关于packages/apps/Set ...

随机推荐

  1. DROOLS通过URL访问changset

    package droolsRule; import java.net.Authenticator; import java.net.PasswordAuthentication; import ka ...

  2. [转]使用RDLC报表

    使用RDLC报表(一) 1       建立数据源 启动VS2005新建一个窗体项目,命名为TestProj 在左边的窗体内选择“添加新数据源”或在菜单上操作“添加新数据源”: 选择后出现对话窗体,选 ...

  3. day45作业

    利用 html + css 写一个最基本的页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. const 有什么用途

    可以定义const 常量:const可以修饰函数的参数.返回值,甚至函数的定义体.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性

  5. Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  6. linux学习(四)-----linux常用指令

    touch 指令 touch 指令创建空文件 基本语法 touch 文件名称 应用实例 案例 1: 创建一个空文件 hello.txt cp 指令 cp 指令拷贝文件到指定目录 基本语法 cp [选项 ...

  7. MyISAM 与 innoDB 的选择

    1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...

  8. Commons BeanUtils工具包

    简介: BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理. 我们知道,一个JavaBean通常包含了大 ...

  9. apache支持多主机头,并防止恶意空主机头的配置实现

    首先,需要启用 LoadModule vhost_alias_module modules/mod_vhost_alias.so # Virtual hostsInclude conf/extra/h ...

  10. crm-ssh-列表显示(顾客列表,用户,联系人列表)

    客户列表 1 分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao 5.完成strutx以及spring的配置 6.书写前台list.jsp页面 ...