如何在Linux中用IP转发使内网访问外网?

by LauCyun Feb 06,2018 23:42:58 49,699 views

上周六,几个项目组一起在会议室做产品对接,突然有一设备(只有有线网卡)需要联网,但是会议室又没有有线网口,只有WiFi。那怎么办呢?

最后的方案是:在笔记本(CentOS系统)中用iptables从一个无线网口IP转发到有线网口,这样设备即可上网。

接下来,将介绍如何用iptables从一个无线网口IP转发到有线网口?

实验环境:

  • Router(路由器):
    • 网段:192.168.0.0/24
  • Laptop(笔记本):
    • 系统:CentOS 6
    • 网卡:
      • eth0:192.168.0.100
      • eth1:192.168.56.1
  • PC(内网主机):
    • 系统:CentOS 6
    • 网卡:
      • bond0:192.168.56.2

其实验环境的拓扑图,如下图所示:


图1 实验网络拓扑图

安装上图的拓扑关系,进行搭建实验环境。

1 配置Laptop

1.1 启用IP转发

首先,需要在Laptop中启用IP数据转发,以下两种方法都可行(第一种方法是临时生效;第二种方法是永久生效):

  • 第一种方法:

    修改/proc/sys/net/ipv4/ip_forward文件:

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


    图2 启用ip转发

  • 第二种方法:

    修改/etc/sysctl.conf文件,修改成如下:

    [root@localhost ~]# vim /etc/sysctl.conf
    ...
    # Controls IP packet forwarding
    net.ipv4.ip_forward = 1  # 把0改成1
    ...

    执行sysctl -p /etc/sysctl.conf 使其生效。

好了,IP数据转发已经开启了~~

1.2 配置iptables规则

在Laptop中,有两个网卡,分别是:eth0连接Router的网络接口; eth1连接PC的网络接口。

在配置iptables之前,先清空iptables的所有规则:


图3 清空iptables

接着就是配置iptables转发规则,先在filter表中添加一条FORWARD规则,然后在nat表中添加一条POSTROUTING路由规则:


图4 配置iptables转发规则

上面配置的规则,系统重启后会还原。要永久生效就执行service iptables save命令。

1.3 配置eth1

最后就是配置eth1,其IP地址为192.168.56.1,子网掩码为255.255.255.0


图5 配置Laptop的eth1

到此为止,Laptop就配置完成了。

2 配置PC

先给PC配置一个ip,其ip地址为192.168.56.2,如下:


图6 设置IP

接着,就是设置路由了,如下:


图7 设置路由

OK,所有的都配置完成后,测试一下:


图8 ping外网

耶!现在PC可以上外网啦~~~

3 参考

Tags