利用iptables的SNAT功能实现局域网共享上网

今天,碰到一个问题:局域网内有5台机器,只有一个公网IP。现在的需求是5台机器都要能够访问外网。这可怎么办呢?当然是使用SNAT了。话虽这么说,可是,在配置的时候,竟然折腾了半天!下面好好总结一下:


  1. 情景介绍:局域网内的5台机器的IP地址分别是
    192.168.180.121-node1
    192.168.180.122-node2
    192.168.180.123-node3
    192.168.180.124-node4
    192.168.180.125-node5

    每台机器都有2块网卡(eth0和eth1),我们上面给出的5个内网IP都是配置在每一台机器的eth0这块网卡上面。

    另外,我们将node1这个机器上的eth1网卡配置一个外网IP(119.75.218.76)。

  2. 开启node1这台机器的ipv4转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    (就是因为这个忘记了,折腾了好久!)
    还有,这个修改在机器重启的时候仍然会失效。要想永久有效,还要把/etc/sysctl.conf文件里边的net.ipv4.ip_forward的值改为1。

  3. 修改其他机器的默认网关:
    因为要让 node1 这台机器帮我们转发流量,所以,将其他机器的默认网关设置成 node1 的内网IP(也就是192.168.180.121)

  4. 在node1 机器上使用iptables 命令进行设置,将其他机器的流量通过这个可以访问外网的机器转发出去:
    iptables -F
    iptables -X
    iptables -Z
    这三条命令将防火墙规则清空。
    之后,使用下面的命令进行流量转发:
    iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o eth1 -j SNAT –to-source 119.75.218.76
    (因为这条规则没有保存,所以重启后失效;怎样保存防火墙规则,请参考其他教程)

本文只是简单介绍了大致的操作,原理性的知识以及详细介绍请参考其他教程。

你可能感兴趣的:(Linux)