markdown Ubuntu Server NAT子网内共享网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Ubuntu Server NAT子网内共享网络相关的知识,希望对你有一定的参考价值。

# 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规则

```bash
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规则:

- 保存iptables规则

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

- 编辑`/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和自动解析域名了。

以上是关于markdown Ubuntu Server NAT子网内共享网络的主要内容,如果未能解决你的问题,请参考以下文章

markdown Ubuntu Server NAT子网内共享网络

markdown 如何重命名Ubuntu Server 16主机名?

markdown 在Ubuntu Server 16.04上安装JDownloader

markdown SSHFS di MacOS dan Ubuntu Server

markdown Ubuntu 16.04上的Node.JS Production Server Setup

markdown Instalasi nodejs dengan versi terbaru melalui nvm di Ubuntu Server 16.04 LTS