怎样使用linux的iptables工具进行网络共享
创始人
2024-03-01 12:54:24
0

在本教程中,我将解释多个设备怎样在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,改好之后应该和下面的一致。

net.ipv4.ip_forward = 1

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

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

2、NAT配置

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

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

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

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

$ sudo iptables -X
$ sudo iptables -F
$ sudo iptables -t nat -X
$ sudo iptables -t nat -F

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

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

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

$ 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。

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

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

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

4、完整的脚本

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

$ sudo vi /usr/local/bin/ishare

#!/bin/bash

## Internet connection shating script

sysctl -w net.ipv4.ip_forward=1
sysctl -p
iptables -X
iptables -F
iptables -t nat -X
iptables -t nat -F
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE

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

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

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

/usr/local/bin/ishare

via: http://xmodulo.com/2014/06/internet-connection-sharing-iptables-linux.html

译者:yujianxuechuan 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

相关内容

【问题】如何替换OpenW...
如何替换OpenWrt路由器登录logo 思路:首先...
2025-05-28 03:14:22
在CentOS系统上动态配...
理解动态NAT的核心逻辑 在Linux服务器管理中,网络地址转换(...
2025-05-10 07:46:26
不影响路由器的情况下分组页...
要实现“不影响路由器的情况下分组页面”,可以使用 Nuxt.js ...
2025-01-11 07:01:35
不要在路由器上使用load...
在使用napalm库时,确实不建议直接在路由器上使用load_me...
2025-01-11 02:31:41
不要更改路由器地址中的数值...
在以下示例代码中,我们使用了Python中的Requests库发送...
2025-01-10 19:00:59
不同路由器上的Java服务...
要在不同路由器上建立Java服务器套接字连接,首先需要确保两个路由...
2025-01-09 11:01:34

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...