linux系统主机双网卡实现路由转发问题与解决

1. 环境

  • 拓扑:
    host1 <----> host2 <----> host3

  • 网卡配置:

    • host1: 192.168.1.1/24
    • host2:

      左eth0: 192.168.1.2/24
      右eth1: 192.168.2.2/24

    • host3: 192.168.2.1/24

2. 需求描述

需要实现主机host1能够与host3直接通信。

3. 转发主机host2配置

3.1 开启内核路由转发参数

  • 临时生效:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效:
    修改sysctl.conf: net.ipv4.ip_forward = 1
    再执行sysctl -p立即生效

3.2 配置路由表

配置路由表,添加静态路由规则

  • 增加192.168.1.0/24网段路由配置信息
    route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
    
  • 增加192.168.2.0/24网段路由配置信息
    route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1
    
  • 查看路由表是否完成配置
     route
    

3.3 配置防火墙iptables(重要!)

这里的iptables其实不是真正的防火墙,官方给出的主要特点是:
主要特点

  • 列出包筛选器规则集的内容;
  • 在包过滤规则集中添加/删除/修改规则;
  • 列出/归零包筛选规则集的每条规则计数器

具体iptables的介绍可以参看iptables详解(1):iptables概念


进入正题,输入iptables -list查看Filter表,里面含三个链:

INPUT链:处理来自外部的数据。
OUTPUT链:处理向外发送的数据。
FORWARD链:将数据转发到本机的其他网卡设备上。

# iptables –list 

Chain INPUT (policy ACCEPT) 
num    target    prot    opt    source    destination 
1    xxx    all    —   0.0.0.0/0    0.0.0.0/0

Chain FORWARD (policy DROP)
num    target    prot    opt    source    destination
1	xxx   all    –    0.0.0.0/0    0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num    target    prot    opt    source    destination
1	xxx   all    –    0.0.0.0/0    0.0.0.0/0

需要注意,如果想要linux主机支持转发,则需要开启内核的IP_FORWARD功能。
检查iptables如果发现Chain FORWARD (policy DROP)这行中的策略(policy)是DROP,则需要修改成为ACCEPT,方法为:

# iptables -t FORWARD -P ACCEPT

3.4 重启服务

重启network服务和iptables服务:

# service network restart
# service iptables restart

至此,可以实现host2的路由转发,使host1与host3能够相互通信。


按:
博客中提及的问题是实验室的师弟师妹搭环境时遇到的,当时的环境是在一台主机上通过VMware虚拟机开启host1和host2(都是centos系统),host2配置了一个虚拟网卡连接host1,同时通过网桥的形式配置了另外一个网卡连接另一台物理主机host3。当时在网上找了很多配置方法的介绍,但几乎都只有3.1和3.2步的介绍,导致host1和host3始终连不起来。最后才发现问题出在iptables中FORWAED的策略是DROP。。。

实现Linux双网卡端口转发,可以使用iptables来进行配置。以下是一个基本的示例命令: ```shell sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport <localport> -j DNAT --to-destination <destaddress>:<destport> sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport <destport> -d <destaddress> -j ACCEPT sudo sysctl -w net.ipv4.ip_forward=1 ``` 解释: 1. 第一条规则将来自eth0接口指定端口的流量导向到目标地址和端口。 2. 第二条规则允许转发流量从eth0接口到eth1接口。 3. 最后一条命令用于启用IP转发。 请注意,上述示例中的eth0和eth1是两个网卡的名称,<localport>是本地监听端口,<destaddress>是目标地址,<destport>是目标端口。 此外,你还可以使用sysctl命令将net.ipv4.ip_forward设置为1来启用IP转发功能。 请根据自己的网络配置和需求进行适当修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [流量转发之端口转发](https://blog.csdn.net/qingzhantianxia/article/details/121956966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [内网入口——代理搭建&端口转发](https://blog.csdn.net/Captain_RB/article/details/108250946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值