如何在 Linux 上使用 iptables 设置 Internet 连接共享
在本教程中,我将解释如何在 Linux 上的多个设备之间共享单个 Internet 连接。虽然消费级 WiFi 路由器如今已成为主流,但假设您家里没有路由器,那么这个问题就不再是问题了。然而,假设您有一个已经组装有调制解调器和 LAN 卡的 Linux 机器。调制解调器通过动态公共 IP 地址连接到 Internet,并且 LAN 卡连接到交换机/集线器。其他设备(Linux/Windows PC、笔记本电脑)无需任何互联网连接即可连接到交换机。要共享 Linux 盒子的互联网连接,您必须将盒子变成网关,以便它可以中继与其他设备之间的流量。
专业术语
私有IP地址(不可路由的地址)是用于局域网的IP地址(通过互联网不可见)。
公共IP地址(可路由地址)是通过互联网可见的IP地址。
IP 伪装是一项允许一组机器通过 MASQ 网关访问互联网的功能。 MASQ 网关后面的那些机器在 Internet 上永远不可见。 MASQ 网关后面的计算机的任何传出和传入流量都必须经过 MASQ 网关。
网络地址转换(NAT)是一种通过IP伪装使私有IP地址到达互联网的功能。
硬件要求
一台具有两个接口(一个公共 IP 地址和另一个私有 IP 地址)的 Linux 盒子,将用作网关。
一台或多台具有私有 IP 地址的 Linux/Windows PC 或笔记本电脑。
交换机/集线器(可选)。
分步指南
Linux 盒子(连接共享网关)上需要执行以下过程。
1. 激活IP转发
为了设置 Internet 连接共享,您需要使用内核参数在 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配置
Internet 连接共享的另一个重要部分是 NAT 配置,可以使用 iptables 命令完成。 iptables 维护四个防火墙表:
FILTER(默认表)
网络地址转换
曼乐
生的
在本教程中,我们将仅使用两个表:FILTER
和 NAT
表。
首先,刷新所有活动的防火墙规则。
$ sudo iptables -X
$ sudo iptables -F
$ sudo iptables -t nat -X
$ sudo iptables -t nat -F
在INPUT
表上,您必须将链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 请求都会由 Linux 盒子自动转发到您的上游 ISP。
如果您在其他设备上使用 Linux,则可以使用以下命令更改其默认网关和 DNS 服务器。我假设您使用的是 192.168.1.0/24
私有 IP 地址段,并且 192.168.1.1
是分配给 Linux 机器的 IP 地址。
$ 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 机器上设置 Internet 连接共享的完整脚本。 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
。打开 /etc/rc.local
,并在语句 exit 0
之前添加以下行。
/usr/local/bin/ishare