GeekHub

Ubuntu配置NAT端口映射,实现内网设备访问外网

上一篇通过Squid配置代理的方式实现了内网计算机访问外网,但是这种方法有一定的局限性,一是受制于协议的限制,只能使用http/https和ftp,二是通过代理访问的效率远不如直接端口映射访问,对于访问网页来说感觉不明显,如果是视频推流这种占用带宽较高的应用就捉襟见肘了。

这里记录一下使用NAT转发实现内网设备访问外网的方法。

首先先简述一下我的试验环境:

台式机、笔记本、路由器、手机

其中台式机和笔记本均连接到网段为192.168.199.x网段的路由器上,路由器不连接外网,手机通过usb网络分享连接到到台式机上,使台式机可以访问外网。

台式机的ip地址为192.168.199.234,笔记本的IP地址为192.168.199.199。

首先配置台式机(公网机器),打开/etc/sysctl.conf,去掉net.ipv4.ip_forward = 1前的注释:

...
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
...

保存后使用下面的命令生效:

sudo sysctl -p

然后需要先查看防火墙状态,这里需要注意的是,很多教程上写的命令是:

sudo service iptables status

但是这条命令并不适用于ubuntu,因为网上大多数案例都是在centos下配置的,ubuntu这里需要使用ufw命令来进行操作:

sudo ufw status

如果防火墙未关闭,则使用如下命令关闭:

sudo ufw disable

更多的ufw命令可以参考这篇博文

关闭防火墙后,配置NAT:

# 指定IP
sudo iptables -t nat -A POSTROUTING -s 192.168.199.199 -j SNAT --to 192.168.199.234
# 整个子网
sudo iptables -t nat -A POSTROUTING -s 192.168.199.0/24  -j SNAT --to 192.168.199.234

到这里台式机(公网机器)就配置完了,下面配置笔记本(内网机器):

配置笔记本网卡的IPv4地址为固定IP,IP地址为192.168.199.199,主机地址设置为192.168.199.234(台式机地址),子管掩码为24,DNS设置为114.114.114.114或8.8.8.8。

保存配置后,输入下面的命令重启网络:

sudo service network-manager restart

这时候打开浏览器,输入www.baidu.com应该就可以看到熟悉的界面了:

但是,需要注意的是,上述iptables命令的设置都是临时设置,重启后设置会失效,若想使设置保留下来,需要使用iptables规则持久化工具,具体配置如下:

安装iptables持久化工具:

sudo apt install iptables-persistent

安装过程中会提示是否保留现有的ipv4和ipv6配置,根据需要选择。

安装好后就可以使用持久化工具命令:

#保存当前iptables配置
sudo netfilter-persistent save
#重新载入当前iptables配置
sudo netfilter-persistent reload

设置好iptables规则后,使用第一条命令可以将配置保存下来,以后每次开机运行第二条命令就可以重新载入之前保存的iptables规则,可以通过将第二条命令加入/etc/rc.local中实现开机自动载入iptables规则。

最后,除了使用NAT实现内网访问外网,还可以使用Squid配置代理实现,参考

Ubuntu配置Squid代理,实现内网设备访问外网

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注