Dnat教程&阿里云服务器如何配置端口映射?
通过iptables配置Dnat是一个比较常见的操作,阿里云的服务在classic网络下无法支持snat,但是dnat实际是没问题的,这里罗列一下操作过程:
实验环境两台阿里云ECS服务器 ,一台公网,一台内网。内网安装nginx,希望访问公网服务器的时候,能够访问到内网的nginx站点。
内网服务器操作过程如下:
首先安装nginx和启动
1 | [root@内网 ~] # yum install nginx -y >>/dev/null |
2 | [root@内网 ~] # /etc/init.d/nginx start |
3 | Starting nginx: [ OK ] |
4 | [root@内网 ~] # lsof -i:80 |
5 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
6 | nginx 1742 root 6u IPv4 5570 0t0 TCP *:http (LISTEN) |
测试nginx安装正常,可以访问。
1 | [root@内网 ~] # curl -I localhost |
2 | HTTP/1.1 200 OK |
3 | Server: nginx/0.8.55 |
4 | Date: Wed, 14 Jan 2015 07:29:05 GMT |
5 | Content-Type: text/html |
6 | Content-Length: 3698 |
7 | Last-Modified: Tue, 11 Nov 2014 16:30:06 GMT |
8 | Connection: keep-alive |
9 | Accept-Ranges: bytes |
公网服务器操作如下:
首先修改内核参数,开启ip转发
1 | [root@公网 ~] # sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf |
2 | 应用生效 |
3 | [root@公网 ~] # sysctl -p |
4 | net.ipv4.ip_forward = 1 |
配置iptables,将访问公网服务器80端口的请求,转发到内网服务器的80
1 | [root@公网 ~] # iptables -t nat -I PREROUTING -d 115.29.96.246 -p tcp --dport 80 -j DNAT --to 10.144.26.11:80 |
这时候我们访问公网服务器IP测试一下,同时抓包看转发后的数据包情况:
1 | 15:35:46.602240 IP 42.120.74.108.8864 > 115.29.96.246.80: S 765781831:765781831(0) win 8192 |
2 | 15:35:46.602272 IP 42.120.74.108.8864 > 10.144.26.11.80: S 765781831:765781831(0) win 8192 |
这样原地址是访客的公网IP,目标是内网服务器的内网地址,这样也没办法双向通讯啊,所以,需要让这个数据包的原地址,也变成内网地址,这样才能和内网服务器建立通讯。
修改原地址就是SNAT
我们继续在公网服务器配置:
1 | [root@公网 ~] # iptables -t nat -I POSTROUTING -d 10.144.26.11 -p tcp --dport 80 -j SNAT --to 10.163.209.59 |
抓包分析:
1 | 15:38:14.846955 IP 42.120.74.108.10839 > 115.29.96.246.80: P 433:858(425) ack 159 win 16385 |
2 | 15:38:14.846985 IP 10.163.209.59.10839 > 10.144.26.11.80: P 433:858(425) ack 159 win 16385 |
3 | 15:38:14.847759 IP 10.144.26.11.80 > 10.163.209.59.10839: P 159:317(158) ack 858 win 317 |
4 | 15:38:14.847772 IP 115.29.96.246.80 > 42.120.74.108.10839: P 159:317(158) ack 858 win 317 |
访客本地公网->公网服务器公网IP
修改目标地址
公网服务器内网IP->内网服务器IP
修改原地址
内网服务器IP->公网服务器内网IP
公网服务器公网IP->访客本地公网
完成通讯,试试看。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云VPC配置SNAT
包括阿里云在内的很多云服务器classcal下都不支持SNAT,有幸拿到了阿里云VPC的测试权限,测试这个虚拟专用网模式下是支持SNAT的,大概列一下操作过程。 1 2 使用一台虚拟路由器,两台虚拟交换机用于连接内网局域网和外网机器所属的局域网,两台 ECS : 一台纯内网,一台绑定了 EIP作为 NAT网关,如下: 1 在虚拟路由器上配置路由 由于为了让内网服务器借助EIP访问公网,所以设置所有目标地址0.0.0.0/0下一跳都转发到绑定了公网IP的ECS实例上。这里的下一跳ECS不支持搜索,有点麻烦。 1 配置好之后,登陆外网机器配置 SNAT 1 iptables -t nat -I POSTROUTING -s 172.16.3.0/24 -j SNAT --to-source172.16.1.2 其中3网段是内网局域网的网段,172.16.1.2是绑定了EIP的ECS自身IP,以便完成源地址转换 1 然后修改内核参数允许 IP转发: 1 sed-i's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g'/etc/sy...
- 下一篇
如何通过固定的IP访问阿里云OSS的文件
某些情况,需要使用OSS来存大量文件,但是请求这些文件时候需要访问固定的IP(比如程序之前写死了IP,比如和运营商谈免流量的问题) 而oss的服务是由多个IP的,并且随时可能变化,这时候可以通过ECS搭建反向代理来实现需求 nginx配置如下: 1 server { listen 80 default_server; server_name _; location / { proxy_pass http://xxx.oss-cn-qingdao-internal.aliyuncs.com/; proxy_set_header Referer http://www.test.com; } } 1 这里通过ECS代理OSS的内网,从而省掉了OSS的流量费,但是访问效率需要依赖ECS的带宽 为了安全,OSS配置了refer限制,也可以通过proxy_set_header来代理发送一个refer,这个refer可以设置一个随意别人不知道的值,能够变相实现加密(只有ECS服务器知道这个refer值) 配置完毕之后,就可以通过访问ECS来访问到OSS上的文件了,比如:
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启