ubuntu 配置NAT配置内网网关服务器

本次完全参考
Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网

ubuntu 官方防火墙文档
Security - Firewall

本人从前的操作
Ubuntu 18.04 通过 ufw route 配置网关服务器

网关 配置内网DNS 服务器

背景知识

从前总认为既然UFW简化了 iptables , 所以执着的要用 ufw。这次看到大家使用 iptables 也很方便,而且感觉更好理解,所以,我也用 iptables 来完成!

主要还是从前不太理解 NAT 和 MASQUERADE ,今天简单学习记录一下网上抄来的一点知识

nat表需要的三个链:

复制代码
  1. PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
  2. POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
  3. OUTPUT:定义对本地产生的数据包的目的NAT规则。

IP Masquerade

复制代码
IP Masquerade 也被称为网络地址转换(NAT)和网络连接共享其他一些流行的操作系统。基本上,这是一种允许不具有公共Internet范围IP地址的计算机与位于Internet和Internet之间的另一台计算机与Internet上的其他计算机通信的方法。

如您所知,IP地址在Internet上用于标识机器。给定一个具有IP地址的数据包,组成Internet的每个路由器都知道将数据包发送到何处以将其发送到目的地的信息。现在,在局域网和其他未直接连接到Internet的网络中,还保留了一些IP地址范围供私人使用。保证这些专用地址不会在公共Internet上使用。

这会导致连接到专用网络的计算机使用专用IP地址的问题,因为它们无法直接连接到Internet。他们没有允许在公共Internet上使用的IP地址。IP Masquerade通过允许具有私有IP地址的计算机与Internet通信来解决此问题,同时修改该计算机的数据包以使用有效的公共IP地址代替原始的私有IP地址。从Internet返回的数据包在到达专用IP机之前被修改回使用原始IP地址。

实际完成起来倒是不复杂,就是简单的三条规则

环境:

  1. 网关服务器

    虚拟机 ubuntu 18.04

    eth0:221.122.XXX.XXX

    eth1: 192.168.0.197

  2. 测试服务器

    虚拟机 ubuntu 20.04

    eth0: 192.168.0.196

操作

除了测试操作之外,所有操作均在网关服务器(192.168.0.197)

既然打算使用 iptables ,最好 ufw disable ,以免冲突!

  1. 开启 ip 转发

    临时修改生效

    复制代码
     echo "1" > /proc/sys/net/ipv4/ip_forward

    永久修改

    sudo vim /etc/sysctl.conf

    去掉注释

    复制代码
     net.ipv4.ip_forward=1

    执行生效

    sudo sysctl -p /etc/sysctl.conf

  2. 编写 iptables 规则

    复制代码
     sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
     
     sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
     
     sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    理解:

    复制代码
     前两条很直观,就是转发,只有这两条,只能 ip 方式访问外网
     
     第三条通过外网网卡 eth0 启用 MASQUERADE ,达到域名访问外网的目的
  3. 保存规则

    $ sudo iptables-save

    复制代码
     # Generated by iptables-save v1.6.1 on Fri Jul 28 09:19:06 2023
     *nat
     :PREROUTING ACCEPT [53:2985]
     :INPUT ACCEPT [1:145]
     :OUTPUT ACCEPT [0:0]
     :POSTROUTING ACCEPT [0:0]
     -A POSTROUTING -o eth0 -j MASQUERADE
     COMMIT
     # Completed on Fri Jul 28 09:19:06 2023
     # Generated by iptables-save v1.6.1 on Fri Jul 28 09:19:06 2023
     *filter
     :INPUT ACCEPT [203:14633]
     :FORWARD ACCEPT [0:0]
     :OUTPUT ACCEPT [138:17681]
     -A FORWARD -i eth1 -o eth0 -j ACCEPT
     -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
     COMMIT
     # Completed on Fri Jul 28 09:19:06 2023
  4. 测试和验证

    在测试服务器上 ( 192.168.0.196)

    $ cat 00-installer-config.yaml

    复制代码
     # This is the network config written by 'subiquity'
     network:
       ethernets:
         eth0:
           addresses:
           - 192.168.0.196/24
           gateway4: 192.168.0.197
           nameservers:
             addresses:
             - 192.168.0.197
             - 223.5.5.5
             searc

    $ ping jd.com

    复制代码
     PING jd.com (106.39.171.134) 56(84) bytes of data.
     64 bytes from 106.39.171.134 (106.39.171.134): icmp_seq=1 ttl=47 time=201 ms
     64 bytes from 106.39.171.134 (106.39.171.134): icmp_seq=2 ttl=47 time=144 ms
     64 bytes from 106.39.171.134 (106.39.171.134): icmp_seq=3 ttl=47 time=6.84 ms
     ^C

    在网关服务器上验证( 192.168.0.197)

    $ sudo iptables -t nat -nL

    复制代码
     Chain PREROUTING (policy ACCEPT)
     target     prot opt source               destination         
     
     Chain INPUT (policy ACCEPT)
     target     prot opt source               destination         
     
     Chain OUTPUT (policy ACCEPT)
     target     prot opt source               destination         
     
     Chain POSTROUTING (policy ACCEPT)
     target     prot opt source               destination   
  5. 重启后再次测试,OK!

相关推荐
only-lucky17 分钟前
C语言socket编程-补充
服务器·c语言·php
笑衬人心。34 分钟前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
码农101号1 小时前
Linux中容器文件操作和数据卷使用以及目录挂载
linux·运维·服务器
程序员弘羽2 小时前
Linux进程管理:从基础到实战
linux·运维·服务器
网硕互联的小客服2 小时前
服务器如何配置防火墙规则以阻止恶意流量和DDoS攻击?
服务器·网络·ddos
AIbase20242 小时前
国内MCP服务平台推荐!aibase.cn上线MCP服务器集合平台
运维·服务器·人工智能
喜欢吃豆3 小时前
快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
服务器·人工智能·python·深度学习·大模型·github·fastmcp
九丝城主4 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--上篇
服务器·flutter·macos·vmware
南瓜胖胖5 小时前
【seismic unix相速度分析-频散曲线】
服务器·unix
热爱生活的猴子8 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker