跳转至

NAT网关模拟

在Linux系统上配置NAT并进行实验,可以通过使用 iptablesnftables 实现。以下是一个完整的实验指导,帮助你将一台Linux主机配置为NAT网关,供私有网络中的设备通过其访问外部网络。


实验环境

  1. Linux主机:充当NAT网关,具有两块网卡:
  2. 网卡1(外网接口,如 eth0):连接到外部网络。
  3. 网卡2(内网接口,如 eth1):连接到内网设备。
  4. 内网设备:通过Linux NAT网关访问外部网络。
  5. 目标:内网设备(如192.168.1.2)可以通过Linux主机访问外部网络。

实验步骤

1. 配置Linux网络

确保Linux主机的两块网卡分别配置正确: - 外网网卡 (eth0): - 配置外网IP地址(例如通过DHCP获取或手动设置)。

sudo dhclient eth0
或手动设置:
sudo ip addr add 203.0.113.1/24 dev eth0
sudo ip link set eth0 up

  • 内网网卡 (eth1)
  • 配置一个私有IP地址(如192.168.1.1),并启用。

    sudo ip addr add 192.168.1.1/24 dev eth1
    sudo ip link set eth1 up

  • 验证网络连接:

    ping -c 4 8.8.8.8  # 测试外网连通性
    ping -c 4 192.168.1.2  # 测试内网设备连通性


2. 启用IP转发

IP转发是NAT工作的核心,确保Linux允许数据包在接口之间转发:

sudo sysctl -w net.ipv4.ip_forward=1
持久生效方式:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p


3. 配置NAT规则

使用 iptables 配置NAT,将内网的流量伪装成从Linux主机的外网接口发出的流量。

  • 配置SNAT规则(替换源地址):

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  • 保存规则(根据系统选择):

  • Debian/Ubuntu
    sudo apt install iptables-persistent
    sudo netfilter-persistent save
  • CentOS/RHEL
    sudo service iptables save

4. 配置内网设备

  1. 设置内网设备的网关为Linux主机的内网IP地址:
  2. IP地址:192.168.1.2
  3. 子网掩码:255.255.255.0
  4. 网关:192.168.1.1

  5. 配置DNS服务器(例如Google DNS):

  6. 8.8.8.8

  7. 验证内网设备与Linux主机的连通性:

    ping -c 4 192.168.1.1


5. 测试外网访问

  1. 在内网设备上尝试访问外网:

    ping -c 4 8.8.8.8
    curl http://www.example.com

  2. 检查Linux主机上的NAT连接跟踪状态:

    sudo conntrack -L


扩展功能

  1. 配置端口转发: 如果需要将外部请求转发到内网设备,可以配置如下规则:

    sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.2:80
    sudo iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -j ACCEPT

  2. 监控NAT流量

  3. 使用 tcpdump 查看NAT流量:
    sudo tcpdump -i eth0
    sudo tcpdump -i eth1

小结

完成以上步骤后,Linux主机可以作为NAT网关供内网设备访问外部网络。你可以通过调整iptables规则实现更复杂的NAT功能,例如端口映射或细化流量控制。