怎样使用linux的iptables工具进行网络共享

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

怎样使用linux的iptables工具进行网络共享

在本教程中,我将解释多个设备怎样在linux下共享一个网络连接。目前无线路由器已经成为主流的消费品,从而解决了本文这一问题。这里假设你家中并没有一台无线路由器,不过,你却有一台已经有"猫"和有线网卡的的linux主机。"猫"是以动态公有IP地址的模式连接到互联网,主机的网卡连接到你的交换机或者集线器。其他设备(如linux或者windows的PC或者笔记本)以网桥的形式连接,并且没有连接到互联网。为了共享linux主机的互联网,你必须把主机转换成网关,以便它能实现从其他设备中传送和接受信息。

术语字汇

  • 私有IP地址(路由不可达地址)是一个被用于本地局域网的IP地址(在互联网中不可见)。
  • 公用IP地址(路由可达地址)是一个在互联网中可见的IP地址。
  • IP伪装是一项允许一系列机器通过MASQ网关连接互联网的功能。这些MASQ网关之外的机器在互联网中是不可见的。MASQ之后的机器中任何流入或流出的数据必须经过MASQ网关。
  • 网络地址转换(NAT)是一项通过IP伪装技术可以使私有IP地址访问互联网的功能。

Hardware Requirements

硬件要求

  • 一台有两个接口(一个公有IP地址和其他的私有IP地址)的linux主机,这个主机将被用作网关。
  • 一台或者多台拥有私有IP地址的linux/windows系统的PC或者笔记本。
  • 交换机/集线器(可选)。

教程步骤

接下来的过程需要在linux主机(用于共享的网关)上完成。

1、激活IP转发

为了设置网络共享,你需要在linux主机上更改一个内核参数来使能IP转发功能。内核启动参数设定在/etc/sysctl.conf文件中。

打开这个文件,定位到含有"# net.ipv4.ip_forward = 0"的这一行,移除#号(即取消注释),然后将其值设置为1,改好之后应该和下面的一致。

 
 
  1. net.ipv4.ip_forward = 1

你还要使激活IP转发功能生效,通过执行下面的命令:

 
 
  1. $ sudo sysctl -w net.ipv4.ip_forward=1
  2. $ sudo sysctl -p

2、NAT配置

另一个网络共享的重要部分是NAT配置,这可以通过使用iptables的命令,iptables包含四个防火墙的规则表:

  • FILTER (默认表格)
  • NAT
  • MANGLE
  • RAW

这个教程中我们将仅使用两个表格:FILTER和NAT表格。

首先,刷新所有活跃的防火墙的规则。

 
 
  1. $ sudo iptables -X
  2. $ sudo iptables -F
  3. $ sudo iptables -t nat -X
  4. $ sudo iptables -t nat -F

在输入表格中,你需要设置转发链(FORWARD)成可接受的(ACCEPT)目的地,因此所有通过主机的数据包将会被正确的处理。

 
 
  1. $ sudo iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  2. $ sudo iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

在NAT表中,你必须为你的WAN口启用IP伪装功能,我们假设WAN口协议是ppp0。为了在ppp0接口上使能IP伪造技术,我们使用以下的命令:

 
 
  1. $ sudo iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE

3、配置私有IP地址

在linux主机上的所有配置完成后,你需要配置其他设备(linux/windows的PC或笔记本)的DNS服务器以及默认网关,让它们的数据流可以指向linux主机。注意你不需要在linux主机上设置一个DNS服务器,从其他设备发出的每一个DNS请求都会通过上游的ISP自动转发到linux主机上。

如果你的其他设备上用的系统是linux,你可以通过以下命令来更改他们的默认网关和DNS服务器。假设你的网段是192.168.1.0/24的私有IP地址网段,linux主机上绑定的IP地址是192.168.1.1。

 
 
  1. $ sudo ip route del default
  2. $ sudo ip route add default via 192.168.1.1
  3. $ sudo sh -c "echo 'nameserver 192.168.1.1' > /etc/resolv.conf"

如果还有其他的linux设备,那么你可以重复以上命令。

如果你有windows设备,你可以通过控制面板的网络连接属性来更改默认网关和DNS服务器。

4、完整的脚本

这是一个在linux主机上设置网络连接共享的一个完整的脚本。WAN口(ppp0协议)需要根据你具体的网络接口协议来替换。

 
 
  1. $ sudo vi /usr/local/bin/ishare

 
 
  1. #!/bin/bash
  2.  
  3. ## Internet connection shating script
  4.  
  5. sysctl -w net.ipv4.ip_forward=1
  6. sysctl -p
  7. iptables -X
  8. iptables -F
  9. iptables -t nat -X
  10. iptables -t nat -F
  11. iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  12. iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  13. iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE

保存以上的脚本为/usr/local/bin/ishare,然后添加可执行权限通过执行下面的命令。

 
 
  1. $ sudo chmox +x /usr/local/bin/ishare

如果你需要这个脚本开机启动,你需要在/etc/rc.local文件中执行这个脚本,并在该文件中的"exit 0"之前添加下面一行。

 
 
  1. /usr/local/bin/ishare


原文发布时间:2014-06-27

本文来自云栖合作伙伴“linux中国”
目录
相关文章
|
17天前
|
安全 Linux 虚拟化
网络名称空间在Linux虚拟化技术中的位置
网络名称空间(Network Namespaces)是Linux内核特性之一,提供了隔离网络环境的能力,使得每个网络名称空间都拥有独立的网络设备、IP地址、路由表、端口号范围以及iptables规则等。这一特性在Linux虚拟化技术中占据了核心位置🌟,它不仅为构建轻量级虚拟化解决方案(如容器📦)提供了基础支持,也在传统的虚拟机技术中发挥作用,实现资源隔离和网络虚拟化。
网络名称空间在Linux虚拟化技术中的位置
|
17天前
|
网络协议 安全 Linux
Linux网络名称空间之独立网络资源管理
Linux网络名称空间是一种强大的虚拟化技术🛠️,它允许用户创建隔离的网络环境🌐,每个环境拥有独立的网络资源和配置。这项技术对于云计算☁️、容器化应用📦和网络安全🔒等领域至关重要。本文将详细介绍在Linux网络名称空间中可以拥有的独立网络资源,并指出应用开发人员在使用时应注意的重点。
|
17天前
|
安全 网络协议 Linux
Linux网络名称空间概述
Linux网络名称空间是操作系统级别的一种虚拟化技术🔄,它允许创建隔离的网络环境🌐,使得每个环境拥有自己独立的网络资源,如IP地址📍、路由表🗺️、防火墙规则🔥等。这种技术是Linux内核功能的一部分,为不同的用户空间进程提供了一种创建和使用独立网络协议栈的方式。本文旨在全方面、多维度解释Linux网络名称空间的概念、必要性和作用。
Linux网络名称空间概述
|
17天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
31 0
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
17天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
17天前
|
网络协议 Linux
在Linux中,管理和配置网络接口
在Linux中管理网络接口涉及多个命令,如`ifconfig`(在新版本中被`ip`取代)、`ip`(用于网络设备配置)、`nmcli`(NetworkManager的CLI工具)、`nmtui`(文本界面配置)、`route/ip route`(处理路由表)、`netstat/ss`(显示网络状态)和`hostnamectl/systemctl`(主机名和服务管理)。这些命令帮助用户启动接口、设置IP地址、查看连接和路由信息。不同发行版可能有差异,建议参考相应文档。
19 4
|
2天前
|
JSON Unix Linux
Linux系统之jq工具的基本使用
Linux系统之jq工具的基本使用
30 2
|
3天前
|
监控 安全 Linux
Linux系统之安装ServerBee服务器监控工具
【4月更文挑战第22天】Linux系统之安装ServerBee服务器监控工具
41 2