ip_forward与路由转发

本文介绍了Linux系统中IP转发的功能及配置方法,包括公有IP与私有IP的区别、路由转发的工作原理,以及如何在CentOS6和CentOS7中启用转发功能。并通过一个实验案例展示了配置过程。

一、前言介绍:

   IP地址分为公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)负责的,这些IP地址分配给了注册并向INIC提出申请的组织机构。Private Address属于非注册地址,专门为组织内部使用。Private Address是不可能直接用来跟WAN通信的,要么利用帧来通信(FRE帧中继,HDLC,PPP),要么需要路由的转发(nat)功能把私有地址转换为公有地址才行。 

   出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。

二、路由转发的工作原理: 

wKioL1hI896Q9q7IAABV7Z6Rw7o772.png

      

首先内网主机向外网主机发送数据包,由于内网主机与外网主机不在同一网段,所以数据包暂时发往内网默认网关GIP处理,而本网段的主机对此数据包不做任何回应。由于内网主机的SIP是私有的,禁止在公网使用,所以必须将数据包的SIP修改成公网上的可用IP,这就是网关收到数据包之后首先要做的事情--IP地址转换。然后网关再把数据包发往外网主机外网主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,更不知道源IP地址是SIP而不是FIP,也没必要知道,目的主机处理完请求,把回应信息发还给网关的FIP。网关收到后,将目的主机返回的数据包的目标IP即FIP修改为发出请求的内网主机的IP地址即SIP,并根据路由表将其发给内网主机。这就是网关的第二个工作--数据包的路由转发内网主机只要查看数据包的DIP与发送请求的SIP相同,就会回应,这就完成了一次请求。 

三、配置Linux系统的IP转发功能:

 首先保证硬件连通,然后打开系统的转发功能

对于CentOS系统,CentOS 6 和 CentOS 7开启路由转发的方式有区别:

 1、对于CentOS 6,有三种方法:

  第一种:

1
[root@centos6 ~] # echo 1 > /proc/sys/net/ipv4/ip_forward

 第二种:

1
2
3
4
5
6
7
8
9
10
11
12
[root@centos6 ~] # vim /etc/sysctl.conf  
  net.ipv4.ip_forward = 0    // 该行的0改为1即可
  net.ipv4.conf.default.rp_filter = 1
  net.ipv4.conf.default.accept_source_route = 0
  kernel.sysrq = 0
  kernel.core_uses_pid = 1
  net.ipv4.tcp_syncookies = 1
  kernel.msgmnb = 65536
  kernel.msgmax = 65536
  kernel.shmmax = 68719476736
  kernel.shmall = 4294967296
[root@centos6 ~] # sysctl -p   //查看修改结果.

 第三种:

1
2
3
[root@centos6 ~] # sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@centos6 ~] #   //这种方法我试过,但修改后没生效。以前两种为主吧!

2、对于CentOS7,CentOS 6中的第二种方法不适用,需用如下方法:

1
2
3
4
5
6
7
8
[root@CentOS7 ~] # vim /etc/sysctl.d/99-sysctl.conf 
  ...
  结尾添加:
  net.ipv4.ip_forward = 1
:wq
[root@CentOS7 ~] # sysctl -p
net.ipv4.ip_forward = 1    // 查看修改结果.
[root@CentOS7 ~] #

四、配置开启路由转发功能,实现两台不同网段的主机实现通信

实验环境:

主机  --  系统  --  主机名  --  ip :

 内网主机 --   CentOS 6.7    --   local_host     --   10.68.7.234

 外网主机   --   CentOS 6.7     --   pub_host      --   192.168.1.201

 网关主机   --    CentOS 7.1    --   gateway        --   内网ip:10.68.7.107 --外网ip:192.168.1.200


相关配置如下:

首先开启网关服务器的路由转发功能:

1
2
3
[root@gateway ~] # sysctl -p
net.ipv4.ip_forward = 1
[root@gateway ~] #

在内网主机配置到内网网关的默认路由:

1
[root@local_host ~] # route add default gw 10.68.7.107

在外网主机配置到外网网关的默认路由:

1
[root@pub_host ~] # route add default gw 192.168.1.200

通过ping测试连通性:

1
2
3
4
5
6
7
[root@local_host ~] # ping 192.168.1.201
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
64 bytes from 192.168.1.201: icmp_seq=1 ttl=63  time =0.742 ms
64 bytes from 192.168.1.201: icmp_seq=2 ttl=63  time =1.38 ms
64 bytes from 192.168.1.201: icmp_seq=3 ttl=63  time =2.64 ms
64 bytes from 192.168.1.201: icmp_seq=4 ttl=63  time =2.06 ms
...
1
2
3
4
5
6
7
8
[root@pub_host ~] # ping 10.68.7.234
PING 10.68.7.234 (10.68.7.234) 56(84) bytes of data.
64 bytes from 10.68.7.234: icmp_seq=1 ttl=63  time =0.568 ms
64 bytes from 10.68.7.234: icmp_seq=2 ttl=63  time =1.49 ms
64 bytes from 10.68.7.234: icmp_seq=3 ttl=63  time =3.48 ms
64 bytes from 10.68.7.234: icmp_seq=4 ttl=63  time =3.65 ms
64 bytes from 10.68.7.234: icmp_seq=5 ttl=63  time =2.20 ms
...


验证成功!

### IP转发功能配置教程 IP 转发IP Forwarding)是一种允许设备将数据包从一个网络接口转发到另一个网络接口的技术。以下是基于 Linux 系统的 IP 转发功能配置方法,以及相关的技术信息。 #### 1. 启用内核中的 IP 转发 在 Linux 系统中,可以通过修改 `/proc` 文件系统来启用或禁用 IP 转发功能。执行以下命令以临时启用 IP 转发: ```bash echo 1 > /proc/sys/net/ipv4/ip_forward ``` 若要永久启用 IP 转发,需要编辑 `sysctl.conf` 文件并添加或修改以下行[^1]: ```bash net.ipv4.ip_forward = 1 ``` 然后通过以下命令应用更改: ```bash sysctl -p ``` #### 2. 配置 iptables 实现 NAT 转发 为了实现 NAT(网络地址转换),可以使用 `iptables` 工具配置规则。例如,将外部请求的目标地址和端口映射到内部服务器的地址和端口。以下是一个示例规则: ```bash iptables -t nat -A PREROUTING -d <外部IP> -p tcp --dport <外部端口> -j DNAT --to-destination <内部IP>:<内部端口> ``` 例如,将目标地址为 `172.25.24.10` 的 HTTP 请求转发到内部服务器 `192.168.1.33:80`,可以使用以下命令: ```bash iptables -t nat -A PREROUTING -d 172.25.24.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.33:80 ``` 此外,还需要确保返回的数据包能够正确地通过网关发送回客户端。为此,可以配置 MASQUERADE 规则: ```bash iptables -t nat -A POSTROUTING -s <内部网络> -o <外部网卡> -j MASQUERADE ``` 例如: ```bash iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ``` #### 3. Azure 中的用户定义路由 (UDR) 和 IP 转发 在 Azure 环境中,可以通过用户定义路由(User Defined Route, UDR)和虚拟设备(Virtual Appliance)来实现 IP 转发功能。例如,创建一条路由规则将特定 IP 地址的流量转发到虚拟设备: ```powershell Get-AzureRouteTable -Name DanTestRouteTable1 | Set-AzureRoute -RouteName dantestroute1 -AddressPrefix 10.0.0.68/32 -NextHopType VirtualAppliance -NextHopIpAddress 10.0.0.36 ``` 此命令将目标 IP 地址为 `10.0.0.68` 的流量转发到下一跳地址 `10.0.0.36` 的虚拟设备[^2]。 #### 4. 远程管理 IP 转发测试 在远程管理场景下,可以使用工具如 XShell 来连接到目标服务器并测试 IP 转发功能。XShell 是一种支持多种协议的终端仿真程序,可以方便地对 Linux 主机进行远程管理[^3]。例如,通过 SSH 登录到服务器后,可以运行以下命令测试 IP 转发是否生效: ```bash ping <目标IP> ``` 或者检查数据包是否正确转发: ```bash tcpdump -i any host <目标IP> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值