如何使用 NAT 将 Linux 服务器设置为路由器

如何使用 NAT 将 Linux 服务器设置为路由器

我们有一个简单的路由器,它具有对称类型的 NAT,但是由于该路由器没有为我们提供任何调试接口,因此我们无法确定特定的数据包是否到达 NAT。

因此,我们需要设置一台 LINUX 计算机,使其成为具有对称 NAT 的路由器,这样我们就可以捕获到此“NAT”的所有数据包并获取我们想要的信息。我们如何在 linux(Fedora 系统,内核 2.6.xx)上执行此操作?

答案1

要将 Linux 机器设置为路由器,您需要以下内容

1- 使用以下方式启用转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

假设你的公共接口是eth1,本地接口是eth0

2- 使用以下命令设置 natting 规则:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

3-接受来自 eth0 的流量:

iptables -A INPUT -i eth0 -j ACCEPT

4-允许从公共接口建立连接。

iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

5-允许传出连接:

iptables -A OUTPUT -j ACCEPT

答案2

我认为其他答案遗漏了一些要点。这是另一种方法,假设 iptables 处于新状态,再次使用 eth0 作为内部接口,使用 eth1 作为外部接口:

  1. 在内核中启用IP转发:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    # or
    sysctl -w net.ipv4.ip_forward=1
    

    要在重启后保留此更改,请net.ipv4.ip_forward=1在 中添加或取消注释/etc/sysctl.conf或 中的文件/etc/sysctl.d

  2. 在 eth1 上启用伪装以重写传出数据包的源地址。如果您确实需要对称 NAT,则需要--random最后的以下内容:

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
    
  3. 配置转发规则。默认情况下,iptables 将无条件转发所有流量。您可能希望限制来自互联网的入站流量,但允许所有出站流量:

    # Allow traffic from internal to external
    iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
    # Allow returning traffic from external to internal
    iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
    # Drop all other traffic that shouldn't be forwarded
    iptables -A FORWARD -j DROP
    

请注意,我们没有触及过滤表中的 INPUT 或 OUTPUT 链;这些与路由器无关。

要在重启后保留这些防火墙更改:

iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables

此步骤将根据 Linux 发行版而有所不同。

答案3

这是一个简单的脚本,可以完成这个任务,它包含了路由器所需的所有精华,并在 UBUNTU 16.04 上进行了充分测试

#!/bin/bash
# This script is written to make your Linux machine Router
# With this you can setup your linux machine as gateway.
# Author @ Mansur Ul Hasan
# Email  @ [email protected]

  # Defining interfaces for gateway.
  INTERNET=eth1
  LOCAL=eth0

# IMPORTANT: Activate IP-forwarding in the kernel!

   # Disabled by default!
   echo "1" > /proc/sys/net/ipv4/ip_forward

   # Load various modules. Usually they are already loaded 
   # (especially for newer kernels), in that case 
   # the following commands are not needed.

   # Load iptables module:
   modprobe ip_tables

   # activate connection tracking
   # (connection's status are taken into account)
   modprobe ip_conntrack

   # Special features for IRC:
   modprobe ip_conntrack_irc

   # Special features for FTP:
   modprobe ip_conntrack_ftp

   # Deleting all the rules in INPUT, OUTPUT and FILTER   
   iptables --flush

   # Flush all the rules in nat table 
   iptables --table nat --flush

   # Delete all existing chains
   iptables --delete-chain

   # Delete all chains that are not in default filter and nat table
   iptables --table nat --delete-chain

   # Allow established connections from the public interface.
   iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

   # Set up IP FORWARDing and Masquerading
   iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
   iptables --append FORWARD --in-interface $LOCAL -j ACCEPT

   # Allow outgoing connections
   iptables -A OUTPUT -j ACCEPT

相关内容