
首先需要将你的web服务器搭建好,然后需要做NAT,我这里有我的一个做NAT的笔记,分享给你
NAT
拓扑结构图:
要求:
1.内网能够ping通外网地址,并且成功访问外网中的web服务;
2.外网能够访问内网的ftp服务。
步骤:
一:内网服务器配置
1.在内网中设置好ip地址,网关和DNS均为NAT服务器内网口地址,并搭建好ftp服务,此处略
二:NAT服务器配置
1.在NAT只能中添加一块网卡作为 外网卡,并设置好ip地址
2.开启NAT服务器的路由功能
[root@c2 ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 //将0改为1
[root@c2 ~]# sysctl -p //永久生效
3.配置防火墙(必须按照以下循序配置,否则配置完成后不能拼通外网,需配置第二次)
#iptables-X
#iptables-t nat -X
#iptables --flush
#iptables -t nat --flush
//以上为重置链表的命令
#iptables-t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to 202.10.10.12
//这条命令是将内网192.168.1.0/24的源地址映射为NAT服务器的外网口地址,eth1为外网卡
# iptables -t nat -A PREROUTING -p tcp--dport 21 -j DNAT --to 192.168.1.11
# iptables -t nat -A PREROUTING -p tcp--dport 20 -j DNAT --to 192.168.1.11
//这两条命令是发布内务的ftp服务
或者:
# iptables -t nat -A PREROUTING -p tcp -d 202.10.10.12--dport 21 -j DNAT --to 192.168.1.11
# iptables -t nat -A PREROUTING -p tcp -d 202.10.10.12--dport 20 -j DNAT --to 192.168.1.11
#/etc/init.d/iptablessave
#/etc/init.d/iptablesrestart
验证:
内网访问外网的web服务:
[root@c1 ~]# curl 202.10.10.13
web
外网访问内网的ftp服务(外网的防火墙一定要关闭,否则ls查看目录时会出错,或者打开外网的20号端口新建链接的也可以)#
[root@c3 ~]# ftp 202.10.10.12
Connected to 202.10.10.12 (202.10.10.12).
220 (vsFTPd 2.2.2)
Name (202.10.10.12:root): ftp01
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>ls
227 Entering Passive Mode(192,168,1,11,93,1).
ftp: connect: Network isunreachable //列不出内容是因为进入了passive模式
ftp>passive //用passive命令切换passive模式和active模式
Passivemode off.
ftp>ls
200 PORT command successful. Consider usingPASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp>
补充:
删除防火墙中配置的记录
[root@c2 ~]# iptables -t nat -L POSTROUTING -n --line-number //列出记录和记录序号
[root@c2 ~]# iptables -t nat -D POSTROUTING1 //根据序号删除记录
你将内网的ftp服务换成web服务就可以了,主要是弄懂NAT的原理,将内部服务通过DNAT发布到外网
因停电Linux机器重启,重启后远程连接正常,就没有在意。今儿有人报告连不上网。我本机测试了下网络显示是正常的,浏览器也能上网。打开终端尝试 ping baidu.com ,结果半天没反应。
心理犯嘀咕: “浏览器能上网,终端连不上网?”
做了以下尝试:
ping 是Windows、Unix和Linux系统下的一个命令。ping 也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通。
如果ping不同可以通过以下方式查找故障原因:
127.0.0.1 是本机IP循环地址,如果本地址无法ping通,则表明本机TCP/IP协议不能正常工作。
用ifconfig查看本机IP,然后ping <本机IP>,通则表明网络适配器(网卡或MODEM )正常工作,不通则是网络适配器出现故障。
ping <同网段其他IP>,不通则表示网络线路出现故障;若网络中还包含有路由器,则应先ping 路由器在本网段端口IP,不通则此段线路有问题;通则再ping路由器所连目标计算机所在网段的端口IP,不通则是路由器出现故障;通则再ping目的计算机IP地址。
ping <网址>,比如ping baidu.com。若本机设置了DNS服务,则会显示该网址指向的IP,表明本机的DNS设置正确而且DNS解析正常,反之就可能是其中之一出现了故障。
以上前三项都通过没问题。最后连外网网址时DNS解析也正确,但是丢包。 Why?
是否是机器处于联网状态,但是屏蔽了ping命令?
因为有些服务器从网络安全的角度出发,会屏蔽ping命令,即屏蔽ICMP协议(我也不清楚这是啥)。
如何检查是否屏蔽?
Linux服务器中有一个文件 /proc/sys/net/ipv4/icmp_echo_ignore_all ,查看文件内容 cat /proc/sys/net/ipv4/icmp_echo_ignore_all
(1)当这个文件的内容为1时,为屏蔽ICMP协议;
(2)当为0时,为启用ICMP协议
两者是可以变换的,
那么我的问题是:上述所有配置都通过了,网卡、网关、icmp设置都正常,能ping通内网、网关,能解析外网,但但但但是丢包。
排除了自己机器的配置方式禁止ping,因为如果配置禁用了ping,则内部ping也将失效。怀疑是外网出口设置了防火墙、或者路由器里设置了wan口禁ping,禁止ping连通外网,但可以ping自己内部网络。
一把鼻涕一把泪,排查了一通问题还是没解决,但不影响使用,就这样吧。。。。。。
参考:1. Linux普通用户无法ping,linux无法ping的几种原因
如果一个linux服务器有三个口接三个不同的网络,对应的网络信息是如下
传统情况下,如果是为了从内向外访问获得更好的速度,让访问电信走电信,访问网通走网通,那么配置是网关只能够配置一个。
比如以电信为主的,那么网关就只设置电信的1.1.1.254,而针对网通和教育网设置不同的路由,路由下一跳指向网通和教育网对应的 网关。
如果这样做的目的只是实现内部访问外面,那么是没问题了,但是如果是为了让外面的用户能够正常访问到服务器上的服务就会出问题。比如电信用户会无法访问网通和教育网的ip,网通用户会无法访问电信和教育网的ip。而且只有设置了默认路由的那个网络能被跨网络访问,其它两个网络只能被本子网的设备访问。
要解决这个问题,思路就是由哪个网口进来的流量希望全部就由哪个回去。用lartc里面提到的方法就是来源的口不同,走不同的路由表。在默认的路由表基础上再建立三个路由表。
用 ip route show 可以看到默认有local,main,default三个路由表,这三个路由表的名称命名来自 /etc/iproute2/rt_tables ,这里先在这个配置文件里面添加三个不同的路由表表名,
之后建立这三个路由表的内容,因为这三个路由表的只是用来响应来自不同接口的,而不是用来相应从哪个接口出去的,所以只需要每个路由表里面建立默认网关即可。
之后再加上三条规则,使来自不同的口的走不同的路由表
至此无论是电信还是网通还是教育网用户,访问三个ip的任意一个地址都能够连通了。即便是服务器上本身的默认路由都没有设置,也能够让外面的用户正常访问。三个网络的IP都能被跨网络访问了。
命令汇总:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)