iptables 实现内网转发上网

本文详细介绍如何使用iptables进行NAT转发,使内网服务器能够通过一台可上网的服务器连接互联网。首先,需在可上网服务器上开启内核路由转发功能,并通过iptables添加SNAT规则。接着,在内网服务器上设置默认路由指向可上网服务器。此外,文章还介绍了MASQUERADE规则,适用于动态IP场景下的NAT转发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  通过iptables做nat转发实现所有内网服务器上网。

操作

  首先开启可以上网的服务器上的内核路由转发功能。这里我们更改/etc/sysctl.conf 配置文件。
[root@web1 /]# sed -i  '$a net.ipv4.ip_forward = 1' /etc/sysctl.conf 
[root@web1 /]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
  使内核参数生效
[root@web1 /]# sysctl  -p 
net.ipv4.ip_forward = 1
   在能上网的机器上添加SNAT规则(cenots7也可以,好像会自己转化)
清空NAT表规则,如果你有自己的规则谨慎操作。没用的删了就可以

[root@web1 ~]# iptables -t nat -F
[root@web1 ~]# iptables -t nat -X
[root@web1 ~]# iptables -t nat -Z
[root@web1 ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 118.186.61.82
[root@web1 /]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            to:118.186.61.82

 

  在不能上网的机器上添加缺省路由指到能上网的机器上。
查看一下route命令是哪个包里面的
[root@web1 ~]# rpm -qf /sbin/route 
net-tools-1.60-114.el6.x86_64
添加缺省路由
[root@web2 /]# route add  default gw 10.1.1.1
测试
[root@web2 /]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=50 time=3.02 ms
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=50 time=3.14 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.023/3.084/3.146/0.082 ms
[root@web2 /]# 

补充

但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip
假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
这个时候如果按照现在的方式来配置iptables就会出现问题了
因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
这样是非常不好用的
 
MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
比如下边的命令:
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
如此配置的话,不用指定SNAT的目标ip了
不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去
这样就实现了很好的动态SNAT地址转换

转载于:https://www.cnblogs.com/lfdblog/p/9717749.html

<think>好的,我现在需要回答用户关于如何启用和配置iptables防火墙的问题。首先,我得回忆一下相关的知识,确保步骤正确。用户提到了系统级指令,但用户不可见,所以我需要按照用户可见层的要求来组织回答,结构要清晰,分步骤说明。 首先,启动iptables服务。根据引用[1],启动服务的命令是systemctl start iptables.service。但可能还需要考虑不同系统的差异,比如有些系统可能需要先安装或者启用服务。不过用户提供的引用里直接用了这个命令,应该没错。然后,设置开机启动,使用systemctl enable iptables,这样每次重启后防火墙规则不会丢失。 接下来是配置方法。用户需要了解如何添加规则。这里要提到基本的链,比如INPUT、OUTPUT、FORWARD。例如,允许SSH的22端口,可以用iptables -A INPUT -p tcp --dport 22 -j ACCEPT。然后默认策略,设置INPUT和FORWARD默认拒绝,OUTPUT允许,这样更安全。不过要注意顺序,先放行必要的服务,再设置默认策略,否则可能把自己锁在外面。 保存规则是关键,因为iptables的规则重启后会失效。根据引用[2],保存命令是iptables-save > /etc/iptables/rules.v4,或者使用iptables-persistent工具。需要提醒用户保存的重要性。 然后可能需要提到一些高级配置,比如NAT转换,引用[3]提到通过路由器NAT实现内网上网,可以适当提及,但用户的问题主要是启动和基本配置,所以可能不需要深入。另外,引用[4]涉及自定义链的创建和删除,但用户可能暂时不需要,不过可以简要提到,以备后续扩展。 还需要注意配置的流程,比如规则表的顺序,匹配流程,但用户的问题比较基础,可能不需要太深入。不过要确保语法正确,比如使用-A追加规则,-j指定动作,-p协议,--dport端口等。 可能的问题点:用户是否使用Systemd系统?比如CentOS 7和Ubuntu可能有不同的服务管理方式。但引用中的命令是systemctl,所以假设用户使用的是Systemd系统。另外,保存规则的位置是否正确,不同发行版路径可能不同,但用户引用的是/etc/iptables/rules.v4,可能适用于Debian系,而RedHat系可能在/etc/sysconfig/iptables。不过用户提供的引用[2]使用了该路径,所以按此处理。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如保存规则的方法、开放特定端口、防止常见攻击、如何查看现有规则,以及iptables和ufw的区别等。</think>### 如何启动和配置 iptables 防火墙 #### 1. 启动 iptables 服务 - **启用服务**: ```bash sudo systemctl start iptables.service # 启动服务[^1] sudo systemctl enable iptables.service # 设置开机自启 ``` #### 2. 基础配置方法 - **添加规则**: - 允许 SSH 连接(端口 22): ```bash sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` - 允许本地回环通信: ```bash sudo iptables -A INPUT -i lo -j ACCEPT ``` - 设置默认策略(拒绝所有输入/转发,允许输出): ```bash sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT ``` - **保存规则**(防止重启失效): ```bash sudo iptables-save > /etc/iptables/rules.v4 # 保存规则至文件[^2] ``` 或使用持久化工具(如 `iptables-persistent`): ```bash sudo apt install iptables-persistent sudo netfilter-persistent save ``` #### 3. 高级配置示例 - **允许 HTTP/HTTPS 流量**: ```bash sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS ``` - **NAT 转换**(内网共享公网 IP): ```bash sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # eth0 为公网接口[^3] ``` #### 4. 查看与调试 - **列出当前规则**: ```bash sudo iptables -L -n -v # 查看过滤表规则 sudo iptables -t nat -L # 查看 NAT 表规则 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值