Linux IP_FORWARD说明

本文介绍了私有IP地址的概念及其在网络中的应用。详细解释了如何通过配置Linux系统作为网关来实现局域网内计算机通过私有IP访问互联网的过程。

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

转自:http://www.cnblogs.com/jackhub/p/3575879.html

ip地址分公有地址和私有地址,public address是由INIC(internet network information center)负责,这些ip地址分配给注册并向INIC提出申请的组织机构。通过它访问internet.private address是属于非注册地址,专门为组织内部使用,private ip address是不可能直接用来跟WAN通信的,要么利用帧来通信(FRE帧中继,HDLC,PPP),要么需要路由的NAT功能把私有地址转换为一个公有ip!
选择一台电脑(有两个网卡或者用单网卡然后用软件虚拟多一个网卡)充当网关,一个网卡(eth0)连接外网ISP,另一网卡(eth1)连接内网(即局域网)。局域网内的ip地址都是私用地址,只能在内部使用,在公网上是不可见的,所以局域网电脑要上网必须修改ip,这就是网关的工作。
工作原理:
内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应。由于源主机ip是私有的,禁止在公网使用,所以必须将数据包的源发送地址修改成公网上的可用ip,这就是网关收到数据包之后首先要做的工作–ip转换。然后网关再把数据包发往目的主机。目的主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,也没必要知道,目的主机处理完请求,把回应信息发还给网关。网关收到后,将目的主机发还的数据包的目的ip地址修改为发出请求的内网主机的ip地址,并将其发给内网主机。这就是网关的第二个工作–数据包的路由转发。内网的主机只要查看数据包的目的ip与发送请求的源主机ip地址相同,就会回应,这就完成了一次请求。

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。
配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能
less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。可使用命令echo “1” > /proc/sys/net/ipv4/ip_forward 修改文件内容,重启网络服务或主机后效果不再。若要其自动执行,可将命令echo “1” > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4=”YES”

<think>好的,我现在需要回答用户关于“ip_forward_use_pmtu”的问题。首先,我得确认用户的问题具体指的是什么。根据之前的对话历史,用户之前询问了UDP报文DF标志的设置逻辑,现在可能是在进一步探讨与路径MTU发现相关的内核参数。 “ip_forward_use_pmtu”听起来像是一个Linux内核参数,可能与IP转发和路径MTU发现有关。我需要回忆或查找这个参数的具体作用和功能。记得Linux系统中有一些网络相关的参数在/proc/sys/net/ipv4/目录下,比如ip_forwardip_default_ttl等,而“ip_forward_use_pmtu”可能就是其中之一。 接下来,我需要确定这个参数的作用。根据命名推测,“forward_use_pmtu”可能是在控制当系统作为路由器转发数据包时,如何处理PMTU(Path Maximum Transmission Unit)的信息。可能涉及是否应用PMTU发现机制,或者是否根据接收到的ICMP需要分片的消息来调整转发行为。 接下来需要查阅相关资料或文档来验证这个猜测。例如,Linux内核文档或相关技术文章。根据之前的知识,当系统作为路由器时,处理转发数据包时的分片策略可能会影响网络性能。如果启用了某种PMTU相关的参数,系统可能会更智能地处理分片,避免不必要的分片或者利用PMTU信息优化转发。 另外,需要联系用户之前的问题,DF标志和PMTU发现的关系。当DF=1时,如果数据包超过路径MTU,路由器会发送ICMP需要分片的错误。而如果系统作为转发节点,如何处理这些ICMP错误,或者是否根据这些信息调整转发策略,可能与该参数相关。 然后,可能需要解释该参数的两种状态:0和1,分别代表启用或禁用某种功能。例如,当ip_forward_use_pmtu设置为1时,系统在转发数据包时会使用缓存的PMTU信息,而不是总是允许分片。这可以避免分片,提高效率,但依赖于正确的PMTU信息。而设置为0时,可能允许分片,确保数据包能够通过,但可能增加网络开销。 还需要考虑实际应用场景,比如在什么情况下需要调整这个参数,可能的性能影响,以及与其他参数(如rp_filter、ip_forward本身)的相互作用。例如,如果网络中存在MTU不一致的链路,正确配置这个参数可能有助于减少分片和提升传输效率。 另外,需要注意用户可能的实际需求,比如他们可能在设置路由器或防火墙时遇到问题,需要调整该参数以解决MTU相关的问题,如某些连接超时或数据包丢失。需要给出配置该参数的方法,例如通过sysctl命令临时修改或永久写入配置文件。 最后,总结这个参数的作用,如何影响系统行为,以及推荐的设置建议,帮助用户根据实际网络环境做出决策。同时,提醒用户修改内核参数可能带来的风险,建议在测试环境中验证后再应用到生产环境。</think>--- ### 分步解释:`ip_forward_use_pmtu` 参数的作用与配置 --- #### 1. **核心定义** - **参数名称**:`net.ipv4.ip_forward_use_pmtu`(Linux 内核参数) - **功能**:控制路由器在转发数据包时**是否依据路径MTU(PMTU)信息调整分片策略**。 - **默认值**:`0`(禁用) - **适用场景**:系统作为路由器(`ip_forward=1`)时生效。 --- #### 2. **参数作用原理** - **启用(值=1)**: - 路由器会根据缓存的路径MTU信息,**主动限制转发包的大小**(不超过PMTU)。 - 若包大小超过PMTU且`DF=1`,触发ICMP "Fragmentation Needed" 错误。 - **禁用(值=0)**: - 路由器忽略PMTU信息,**直接按出口链路MTU分片**(若`DF=0`允许分片)。 --- #### 3. **典型场景对比** | **配置状态** | **行为模式** | **优点** | **缺点** | |--------------|---------------------------------------|------------------------------|------------------------------| | `ip_forward_use_pmtu=1` | 优先避免分片,依赖PMTU信息 | 减少分片开销,优化传输效率 | 依赖PMTU缓存准确性,可能因ICMP过滤导致失败 | | `ip_forward_use_pmtu=0` | 按出口MTU直接分片(若允许) | 确保数据可达性,避免PMTU探测失败 | 分片增加延迟和资源消耗 | --- #### 4. **配置示例** - **临时修改**(重启失效): ```bash sysctl -w net.ipv4.ip_forward_use_pmtu=1 ``` - **永久生效**: ```bash echo "net.ipv4.ip_forward_use_pmtu=1" >> /etc/sysctl.conf sysctl -p ``` --- #### 5. **实际应用建议** - **启用条件**: - 网络环境支持PMTU探测(未过滤ICMP错误包)。 - 需要优化转发效率(如高吞吐量场景)。 - **禁用条件**: - 网络中存在MTU不一致或ICMP被过滤。 - 优先保证数据可达性而非效率(如低可靠性网络)。 --- #### 6. **与其他参数的关联** - **`ip_forward=1`**:必须开启IP转发功能,否则本参数无效。 - **`rp_filter`(反向路径过滤)**:需配置为宽松模式(`rp_filter=2`),避免PMTU更新被拒绝。 - **`mtu_expires`**:控制PMTU缓存有效期(默认10分钟),影响动态适应性。 --- #### 7. **风险提示** - **PMTU黑洞问题**:若中间设备丢弃ICMP错误包,启用`ip_forward_use_pmtu=1`可能导致数据包静默丢失。 - **调试方法**: - 使用 `tcpdump` 抓取ICMP错误包:`tcpdump -i eth0 "icmp[0] == 3"`。 - 检查PMTU缓存:`ip route show cache | grep mtu`。 --- ### 总结 - **`ip_forward_use_pmtu` 的本质**:在路由器分片策略中**权衡效率与可靠性**。 - **推荐配置**: - **稳定网络**:启用(`=1`),依赖PMTU优化性能。 - **复杂网络**:禁用(`=0`),保守分片保证可达性。 - **核心价值**:减少不必要的分片开销,但需确保网络支持PMTU探测机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值