外网不能访问linux服务器
没这么弄过。
印象里:
apache 有 http 目标域名分析功能,不同的来源,他会自动分析请求所要求的网站,之后自动去调用。
windows 也有这个功能,但默认好像是关闭的。apache 默认是打开的。
这就导致你的机器内网 ip 和内网对应端口访问,apache 正确调用到需要的虚拟服务器。外网 ip 访问请求没有设置,所以打开失败。印象里外网映射过来的请求,还是外网映射的那个端口作为目标请求。
应该是你的这个机器改为通配符,全都无条件解析为你的虚拟站点就行了。
--------------------------
tomcat 好像也有这个设置。tomcat 是 apache 的子项目,应该 web 服务器部分的代码、设置有互通的。
禁用请求应该是连内网也访问不了的。
本文主要介绍如何使用iptbales实现linux24下的强大的NAT功能。关于iptables的详细语法请参考“用iptales实现包过虑型防火墙”一文。需要申明的是,本文绝对不是 NAT-HOWTO的简单重复或是中文版,在整个的叙述过程中,作者都在试图用自己的语言来表达自己的理解,自己的思想。
一、概述
1 什么是NAT
在传统的标准的TCP/IP通信过程中,所有的路由器仅仅是充当一个中间人的角色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说,除了将源MAC地址换成自己的MAC地址以外,路由器不会对转发的数据包做任何修改。NAT(Network Address Translation网络地址翻译)恰恰是出于某种特殊需要而对数据包的源ip地址、目的ip地址、源端口、目的端口进行改写的操作。
2 为什么要进行NAT
我们来看看再什么情况下我们需要做NAT。
假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息,这时候我们就可以通过NAT来提供这种服务了。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过NAT技术使发给其中某一个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。
再比如使用拨号上网的网吧,因为只有一个合法的IP地址,必须采用某种手段让其他机器也可以上网,通常是采用代理服务器的方式,但是代理服务器,尤其是应用层代理服务器,只能支持有限的协议,如果过了一段时间后又有新的服务出来,则只能等待代理服务器支持该新应用的升级版本。如果采用NAT来解决这个问题,
因为是在应用层以下进行处理,NAT不但可以获得很高的访问速度,而且可以无缝的支持任何新的服务或应用。
还有一个方面的应用就是重定向,也就是当接收到一个包后,不是转发这个包,而是将其重定向到系统上的某一个应用程序。最常见的应用就是和squid配合使用成为透明代理,在对http流量进行缓存的同时,可以提供对Internet的无缝访问。
3 NAT的类型
在linux24的NAT-HOWTO中,作者从原理的角度将NAT分成了两种类型,即源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。
二、原理
在“用iptales实现包过虑型防火墙”一文中我们说过,netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。因为系统缺省的表是"filter",所以在使用filter功能时,我们没有必要显式的指明"-t filter"。
同filter表一样,nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:
PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
OUTPUT:定义对本地产生的数据包的目的NAT规则。
三、操作语法
如前所述,在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项:
1 对规则的操作
加入(append) 一个新规则到一个链 (-A)的最后。
在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace) 一条规则 (-R)。
在链内某个位置删除(delete) 一条规则 (-D)。
删除(delete) 链内第一条规则 (-D)。
2 指定源地址和目的地址
通过——source/——src/-s来指定源地址(这里的/表示或者的意思,下同),通过——destination/——dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:
a 使用完整的域名,如“wwwlinuxaidcomcn”;
b 使用ip地址,如“19216811”;
c 用xxxx/xxxx指定一个网络地址,如“19216810/2552552550”;
d 用xxxx/x指定一个网络地址,如“19216810/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。
缺省的子网掩码数是32,也就是说指定19216811等效于19216811/32。
3 指定网络接口
可以使用——in-interface/-i或——out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。
4 指定协议及端口
可以通过——protocol/-p选项来指定协议,如果是udp和tcp协议,还可——source-port/——sport和 ——destination-port/——dport来指明端口。
四、准备工作
1 编译内核,编译时选中以下选项,具体可参看“用iptales实现包过虑型防火墙”一文:
Full NAT
MASQUERADE target support
REDIRECT target support
2 要使用NAT表时,必须首先载入相关模块:
modprobe ip_tables
modprobe ip_nat_ftp
iptable_nat 模块会在运行时自动载入。
五、使用实例
1 源NAT(SNAT)
比如,更改所有来自19216810/24的数据包的源ip地址为1234:
iptables -t nat -A POSTROUTING -s 19216810/24 -o eth0 -j SNAT ——to 1234
这里需要注意的是,系统在路由及过虑等处理直到数据包要被送出时才进行SNAT。
有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用。比如
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
可以看出,这时候我们没有必要显式的指定源ip地址等信息。
2 目的SNAT(DNAT)
比如,更改所有来自19216810/24的数据包的目的ip地址为1234:
iptables -t nat -A PREROUTING -s 19216810/24 -i eth1 -j DNAT ——to 1234
这里需要注意的是,系统是先进行DNAT,然后才进行路由及过虑等操作。
有一种DNAT的特殊情况是重定向,也就是所谓的Redirection,这时候就相当于将符合条件的数据包的目的ip地址改为数据包进入系统时的网络接口的ip地址。通常是在与squid配置形成透明代理时使用,假设squid的监听端口是3128,我 们可以通过以下语句来将来自19216810/24,目的端口为80的数据包重定向到squid监听
端口:
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 19216810/24 ——dport 80
-j REDIRECT ——to-port 3128
六、综合例子
1 使用拨号带动局域网上网
小型企业、网吧等多使用拨号网络上网,通常可能使用代理,但是考虑到成本、对协议的支持等因素,建议使用ip欺骗方式带动区域网上网。
成功升级内核后安装iptables,然后执行以下脚本:
#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp
#进行ip伪装
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
2 ip映射
假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息。我们可以再防火墙的外部网卡上绑定多个合法IP地址,然后通过ip映射使发给其中某一 个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。
我们假设以下情景:
该ISP分配给A单位www服务器的ip为:
伪ip:1921681100
真实ip:202110123100
该ISP分配给B单位www服务器的ip为:
伪ip:1921681200
真实ip:202110123200
linux防火墙的ip地址分别为:
内网接口eth1:19216811
外网接口eth0:2021101231
然后我们将分配给A、B单位的真实ip绑定到防火墙的外网接口,以root权限执行以下命令:
ifconfig eth0 add 202110123100 netmask 2552552550
ifconfig eth0 add 202110123200 netmask 2552552550
成功升级内核后安装iptables,然后执行以下脚本:
#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp
首先,对防火墙接收到的目的ip为202110123100和202110123200的所有数据包进行目的NAT(DNAT):
iptables -A PREROUTING -i eth0 -d 202110123100 -j DNAT ——to 1921681100
iptables -A PREROUTING -i eth0 -d 202110123200 -j DNAT ——to 1921681200
其次,对防火墙接收到的源ip地址为1921681100和1921681200的数据包进行源NAT(SNAT):
iptables -A POSTROUTING -o eth0 -s 1921681100 -j SNAT ——to 202110123100
iptables -A POSTROUTING -o eth0 -s 1921681200 -j SNAT ——to 202110123200
这样,所有目的ip为202110123100和202110123200的数据包都将分别被转发给1921681100和1921681200;而所有来自1921681100和1921681200的数据包都将分 别被伪装成由202110123100和202110123200,从而也就实现了ip映射。
linuxbind如何禁止一个IP访问此DNS?
会有有访问限制的。假如你bind的是一个内网IP,那么是无法通过外网IP来访问到你的DNS服务器的。所以你当配置dns的bind的时候,一定要注意这些细节。
解析域名要用内网ip还是外网ip?
要用公网的IP。
一般小网站用虚拟主机就可以了,够用就行,没必要用整台的服务器。推荐你用:云虚拟主机-基础版:多线机房,2G空间,100M的MSSQL或MYSQL,WIN2008支持ASP/NET/MSSQL2008,Linux支持PHP4/5/MYSQL5,网站备案免费。198元/年。咱现在在线,可以加一下。如何查看自己电脑的主机名和局域网ip地址?
arp-a加对方IP是查对方的MAC地址nbtstat-a加对方IP查对方的主机名用IP地址反查主机名pingip就可以得到主机名,nbtstat-Axxxxxxxxxxxx可得到主机名。
NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态,通过该工具你可以获得远程或本地机器的组名和机器名。虽然用户使用ipconfig/winipcfg工具可以准确地得到主机的网卡地址,但对于一个已建成的比较大型的局域网,要去每台机器上进行这样的操作就显得过于费事了。网管人员通过在自己上网的机器上使用DOS命令nbtstat,可以获取另一台上网主机的网卡地址。我们还是先来看看它的语法格式吧:NBTSTAT]参数说明:-aRemotename-说明使用远程计算机的名称列出其名称表,此参数可以通过远程计算机的NetBios名来查看他的当前状态。-AIPaddress-说明使用远程计算机的IP地址并列出名称表,这个和-a不同的是就是这个只能使用IP,其实-a就包括了-A的功能了。-c-列出远程计算机的NetBIOS名称的缓存和每个名称的IP地址这个参数就是用来列出在你的NetBIOS里缓存的你连接过的计算机的IP。-n-列出本地机的NetBIOS名称,此参数与上面所介绍的一个工具软件“netstat”中加“-a”参数功能类似,只是这个是检查本地的,如果把netstat-a后面的IP换为自己的就和nbtstat-n的效果是一样的了。-r-列出Windows网络名称解析的名称解析统计。在配置使用WINS的Windows2000计算机上,此选项返回要通过广播或WINS来解析和注册的名称数。-R-清除NetBIOS名称缓存中的所有名称后,重新装入Lmhosts文件,这个参数就是清除nbtstat-c所能看见的缓存里的IP。-S-在客户端和服务器会话表中只显示远程计算机的IP地址。-s-显示客户端和服务器会话,并将远程计算机IP地址转换成NETBIOS名称。此参数和-S差不多,只是这个会把对方的NetBIOS名给解析出来。-RR-释放在WINS服务器上注册的NetBIOS名称,然后刷新它们的注册。interval-每隔interval秒重新显示所选的统计,直到按“CTRL+C”键停止重新显示统计。如果省略该参数,nbtstat将打印一次当前的配置信息。此参数和netstat的一样,nbtstat中的“interval”参数是配合-s和-S一起使用的。好了,关于nbtstat的应用就不多讲了,相信看了它的一些参数功能也就明白了它的功能了,只是要特别注意这个工具中的一些参数是区分大、小写的,使用时要特别留心!另外在系统中还人置有许多这方面的工具,如ARP命令是用于显示并修改Internet到以太网的地址转换表;nslookup命令的功能是查询一台机器的IP地址和其对应的域名,它通常需要一台域名服务器来提供域名服务,如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名在此就不多讲了,另外还要说明的一点就是不同的系统中的相应命令参数设置可能有不同之处,但大体功能是一致的,希望大家在应用时稍加注意,本文所列的这些工具软件参数用法全是针对Win9xWinMe,在NT和UNIX、LINUX系统中有一些不同之处在局域网内,我们常使用一些工具来查IP查主机名,利用ipconfig或者ping可以查到IP地址,也是我们常使用的工具。而要查网内的主机,可以用网上邻居,其实我们也有一个很方便的方法,通过指定IP地址就可以查询到主机名,在windows的命令行方式下,输入命令:nbtstat-A1921681111(对方的IP地址)就会把主机名,此主机所在的群组名也显示出来nbtstat该命令使用TCP/IP上的NetBIOS显示协议统计和当前TCP/IP连接,使用这个命令你可以得到远程主机的NETBIOS信息,比如用户名、所属的工作组、网卡的MAC地址等。在此我们就有必要了解几个基本的参数。-a使用这个参数,只要你知道了远程主机的机器名称,就可以得到它的NETBIOS信息(下同)。-A这个参数也可以得到远程主机的NETBIOS信息,但需要你知道它的IP。-n列出本地机器的NETBIOS信息。当得到了对方的IP或者机器名的时候,就可以使用nbtstat命令来进一步得到对方的信息了,这又增加了我们入侵的保险系数。linux共享目录?
可以实现,只需要把A的目录共享出来就可以了,两台电脑在内网就行首先在Avi/etc/exports/sys/upload(rw)servicenfsrestart然后到Bcd/ln-s/net/A的IP/sys/sys就可以了
linux一个网卡配置多个ip的作用?
比如说在公司,分为外网和内网,一个网卡设置两个或多个ip,可以保证既能访问外网也能访问内网,这样就不需要多张网卡了
是需要让人可以在外网上能访问处于内网下的该Linux虚拟机吧?一般如果需要实现外网访问的话首先你需要有一个域名才可以的吧。要么申请一个域名,要么找一个代理。你们公司应该也有自己的主页吧,那应该就有自己的域名,看能不能通过公司主页这个外网域名做个代理转到你公司内网上的Linux虚拟机上。我不是搞网络的,具体操作我也不懂,只是给你提供一个思路。说的不对的地方请大家不要在意。
0条评论