Ubuntu 设置NAT共享网络(命令行方法)

  本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用。我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth1表示连接到内网交换机上的网卡,内部子网为10.0.0.0,通过NAT机制,内网中的机器可以通过网关机器访问Internet,而不需要额外的公网IP。

  本文中的配置值需要根据具体环境适当更改。

一、Gateway端

  1. 给内网网卡配置静态IP(此前确保另一张外网网卡eth0已经能够正常访问Internet。已经为eth1配置过内网静态IP的可以跳过本步)

sudo ip addr add 10.0.0.11/24 dev eth1

  这里假设eth1的IP为10.0.0.11,。

  2. 配置NAT规则

sudo iptables -A FORWARD -o eth0 -i eth1 -s 10.0.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  第一条规则允许转发初始网络包,第二条规则允许转发已经建立连接后的网络包,第三条则设置NAT。

  接下来需要保存iptables规则,确保每次重启时能够加载NAT规则:

  2.1 保存iptables规则

sudo iptables-save | sudo tee /etc/iptables.sav

  2.2 编辑/etc/rc.local文件,将下面的一行添加到“exit 0”之前:

iptables-restore < /etc/iptables.sav

  这样以后每次重启机器时都会自动加载NAT相关的iptables规则。  

  3 启用路由转发,编辑/etc/sysctl.conf 文件,删除起始的“#”,解除

#net.ipv4.ip_forward=1

  的注释。然后使其生效:

sudo sysctl -p

  这样我们就完成了网关一端的设置。

二、Client端

  一旦网关机器设置完成,任何OS的客户端都能够通过连接到网关而访问外部网络。这里以Ubuntu Server作为client为例,假设client的eth0连接到网关eth1所在的内网10.0.0.0上,

  1. 为eth0指派静态IP(需与server端的eth1在同一网段,如果已经配置过则可以跳过本步),编辑/etc/network/interfaces文件:

auto eth0
iface eth0 inet static
        address 10.0.0.31
        netmask 255.255.255.0
        gateway 10.0.0.11
        dns-nameservers YourDNSServer

  因为我们的网关服务端并没有充当DNS服务器,此处需要额外指定client的DNS服务器,通常从网络服务提供商(ISP)那里获得。

  2. 接下来配置路由网关

sudo route add default gw 10.0.0.11 dev eth0

  使网关配置生效,如果以前已经生成过/etc/resolv.conf文件中的nameserver字段,那么这时client应该已经能够访问外部网络了,否则需要编辑/etc/resolv.conf,添加字段:

nameserver YourDNSServer

  由于在/etc/network/interfaces文件中已经配置过dns-nameservers,所以重新启动client机器时不会影响DNS配置。

  此时client已经能够通过网关机器访问外网,如果不知道ISP的DNS服务器地址,可以使用OpenDNS作为替代。

三、高级Gateway配置

  可以为gateway机器配置DHCP和DNS服务器功能,从而简化客户端机器的联网配置,同时省却为client配置DNS的过程;

  1. 安装dnsmasq

sudo aptitude install dnsmasq

  2. 备份dnsmasq的配置文件以备参考

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf-backup

  3. 编辑dnsmasq的配置文件/etc/dnsmasq.conf,添加下面两行:

interface=eth1
dhcp-range=10.0.0.100,10.0.0.250,72h

  注意这是为gateway机器配置DHCP/DNS,interface字段需要设为该机器连接到内网的那个网卡,同时DHCP的IP池应该在我们之前配置的那个网段中。

  4. 重启dnsmasq服务

sudo /etc/init.d/dnsmasq restart

  这样client端就能够获取动态IP和自动解析域名了。

时间: 2024-10-10 23:20:40

Ubuntu 设置NAT共享网络(命令行方法)的相关文章

ubuntu设置默认启动方式——命令行

有时候我们在一些机器运行ubuntu不流畅,或者个人习惯等一些其他原因,并不想启动桌面程序,我们就需要修改启动方式.下面我们来说一下相关的内容. 单纯的修改启动的方式是很简单的,打开终端,在其中输入 sudo vim /etc/init/lightdm.conf(这个地方补齐一下就行) 修改一下这段的一句: start on ((filesystem and runlevel [!06] and started dbus and plymouth-ready) or runlevel PREVL

Ubuntu server版上使用命令行操作VPN客户端

Ubuntu server版上使用命令行操作VPN客户端 VPN,虚拟专用网络,这个技术还是非常实用的.最近笔者参与的项目中就使用上了VPN,大概情况是这样的,有两个开发团队,在异地,代码服务器在深圳了,它使用的是企业内部局域网,支持上网功能的,我们在公网上弄了个阿里云服务器,装了ubuntu vpn的server,其实我们现在要做的就是把代码服务器通过VPN拨号上去,组建一个新的本地网络,怎么大家VPN的server笔者就不在这描述了,网上已经有大把资料了,笔者下面就简要介绍一下自己在代码服务

命令行方法查看和设置环境变量

1. 获取应用安装绝对路径: 方法一:一层层点进去,然后复制路径栏目: 方法二:打开软件执行文件所在目录,按住shift点击鼠标邮件,选择powerShell,现在win10都自带了,输入: pwd 即可看到路径,划选点右键即可复制路径. 2. 查看环境变量: win+R输入cmd,打开命令行: C:\Users\10375>echo %PATH% 3. 新添加一个环境变量,点右键即可将刚刚复制的路径粘贴到这里,后面的':'这个一定不要掉了,这个表示断点,这里表示将这个路径加到环境变量的最前面.

Mysql数据库中设置root密码的命令及方法

我们都知道通常PHP连接 Mysql都是通过root用户名和密码连接,默认情况下在Mysql安装时root初始密码为空,在安装使用PHP开源系统时,都需要填写连接Mysql数据库的用户名和密码,此时当你忘记了Mysql的root密码或没有设置Mysql的root密码时,就必须要修改或设置Mysql的root密码,这个问题对于PHP入门学习者来说也是个头大的问题,其实修改Mysql的root密码有很多方法,可以利用Mysql工具,也可以使用Mysql更改root 密码的命令来实现. 准备工作 在使

Ubuntu设置环境变量的几种方法

1.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.1 永久的:需要修改配置文件,变量永久生效. 1.2 临时的:使用export命令声明即可,变量在关闭shell时失效. 2.设置变量的三种方法 2.1 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 例如:编辑/etc/profile文件,添加CLASSPATH变量 $ vi /et

如何设置fedora默认从命令行启动?

Sumary:因为在fedora中没有/etc/initab文件我们不方便从这里设置它的runlevel target,但是linux又给我们提供了一个强悍的工具systemd,我们可以用system来链接默认的启动级别,所以开始吧! 一.实现代码 (1)删除目标链接并创建新的符号链接(从命令行启动) ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target (2)从图形界面启动 把multi-

linux centos7 redhat7 怎么 如何设置开机自动进入命令行模式

设置 centos7/redhat7 开机默认进入命令行模式 首先用 root 用户打开配置文件 inittab,执行命令: vim /etc/inittab 由于 centos7 的 inittab 已经不再使用,而用 systemd 管理,所以设置开机进入命令行用root用户执行命令: systemctl set-default multi-user.target 再次开机则默认进入命令行模式咯 命令行切换至桌面: init 5 桌面切换至命令行: inti 3

WOL*LAN远程换醒命令行方法

wol远程唤醒需要网卡的支持,现在一般的网卡也都支持,只有有线网络能实现. 这里介绍Wake On Lan Command Line的使用 下载地址 https://www.depicus.com/wake-on-lan/wake-on-lan-cmd 打开cmd,CD到下载wolcmd的文件路径 命令格式 wolcmd [mac address] [ip address] [subnet mask] [port number]//端口不知道可以不用写 完成命令后就可以远程唤醒了,如果有失败的可

Mysql修改设置root密码的命令及方法

方法一:使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD(string),该函数对一个明文密码进行加密,但不能解密.专门用于mysql.user(用户权限表)中设置密码,命令如下: mysql> use mysql Database changed mysql> update user set password=password('123456') where user='root'; Query OK, 1 row affected (0.00 sec) Row