关于某墙的端口封锁

2012-12-22 20:57:52 +08:00
 plan9
最近看到好多人发帖说到墙会封锁端口,个人感觉这个端口应该不是墙干的,而是你的服务商干的

因为好多服务商提供给你的都是一个局域网的ip,而公网ip是由好多人共有的,但是一个ip只能有6万多个端口,所以如果你长时间使用某个端口的,可能会被你的服务商切断连接,或者你所在的ip已经使用了超过单个ip最大端口数也会被切断连接

判断是否是这种原因的话很简单,过一段时间再连接同样的端口试试,如果可以连接的话应该就是这个问题

比如你用浏览器去下载一下大文件,经常出现下着下着就断了的情况,这种情况也有很大原因是你使用的是局域网ip

而对于最近这次墙的升级,个人感觉改用udp的openvpn应该会有一定的作用,不过这个我没试过,不知道是否准确,大家被封的vpn都是什么类型的?
11276 次点击
所在节点    奇思妙想
74 条回复
plan9
2012-12-23 00:58:25 +08:00
@wwwjfy
>>查了一下没找到1个ip是否可以有超过65535个端口,虽然我猜对于路由这种配置不会太难
嗯,我也没有找到很多资料
不过找到了这个
http://wenku.baidu.com/view/36bedf40336c1eb91a375dca.html
貌似是Cisco的某款路由器的设置文档,nat的最大tcp连接数可以0到65535之间可以自由设置

>>问题是如果端口已经用完,应该是移到下一个可用的ip,或者新连接无法建立吧,不觉得应该切断已有连接
这个我也不懂...感觉运营商可能会切断长时间占用的连接

>>过段时间连接同样端口成功就认为是这样的原因也比较武断,可能性不止这一种。至少GFW可能封一段时间会解封,比如访问google就是这样
这个我道没有考虑到,是有点武断

>>另外,除非有什么特殊事件,用户不会一下子猛增,运营商应该有这种准备,应该会有好多备用ip,而且工作着的ip也不应该是满负荷的..
现在可用ip越来越少了,用户越来越多,运营商应该会给每个ip分配固定的用户吧,感觉有很大可能连接数会超过限制
plan9
2012-12-23 01:09:32 +08:00
@binux
@wwwjfy
写错了...
源地址1.1.1.1,源端口8888,目的地址1.1.1.2,目的端口88,协议tcp
之前已经用了8888这个端口了,所以下次发包会换一个端口
源地址1.1.1.1,源端口8889,目的地址1.1.1.3,目的端口88,协议tcp
Kymair
2012-12-23 01:56:16 +08:00
@plan9 在NAT的问题的更正确一些,楼上几位同学有点想当然了。

@cabbala “NAT做地址转换只是将源地址修改为NAT的对外IP”, 如果NAT只是做这一件事情,那么
两个clients都通过一个NAT device访问同一个server, 那么server发回的包NAT要怎么区分哪个给A哪个给B呢? 答案是,NAT有一个port pool, 会给每个客户分配一个不同的端口,然后用状态表记录下来。

参见http://en.wikipedia.org/wiki/NAT#Translation_of_the_Endpoint
binux
2012-12-23 01:57:17 +08:00
@wwwjfy 目的地址,端口都一样,就换个端口就好了啊。但是同一个端口可以在不同的服务通信中复用。

@plan9 如果不需要为什么要换一个端口?
plan9
2012-12-23 02:10:13 +08:00
@binux
同一个端口不可以建立复数个通信的,我记得端口复用只是转发而已

具体请参考@Kymair 的答案
Kymair
2012-12-23 02:12:55 +08:00
10.0.0.101要打开一个网页,那么浏览器取一个可用的端口比如1001,这个包发到路由器10.0.0.1时,路由器不仅会把source IP换成自己10.0.0.1, 还会把source port 1001也换成port pool的一个可用的比如2001. 同样10.0.0.102这时也访问网络,路由器会把102的包的source IP换成10.0.0.1, source port换成port pool里的可用值比如2002.
从server返回路由器的包,dest IP都是10.0.0.1, 这个时候就能用port是2001还是2002来识别出包是给101还是102
cabbala
2012-12-23 02:17:53 +08:00
@Kymair 我举得例子专门挑的目标地址不同的。。。你却在说目标地址相同的情况。

目标地址相同NAT自然会改变源端口了。但这个也推导不出65535这个所谓的NAT最大并发连接数啊

端口是可以复用的,五要素{源地址,源端口,目的地址,目的端口,协议(TCP/UDP)}只要有一个不同就可以区分
cabbala
2012-12-23 02:19:42 +08:00
@plan9
「同一个端口不可以建立复数个通信的,我记得端口复用只是转发而已」

所以说我才让你好好想想为什么一个只开放了80端口的服务器,却可以连成百上千个client。。。端口是可以复用的,那么多程序在用。。
cabbala
2012-12-23 02:22:28 +08:00
@plan9 「这个我可以很确定的告诉你,80端口只是连接的时候使用,然后服务器会新开一个端口跟客户端进行通信」

这个。。。。,HTTP服务器是不会多开其他端口的,你信不信我用iptables把除80外的端口全封了,我的web server照样上百并发?
Kymair
2012-12-23 02:54:14 +08:00
@cabbala Cisco的这个网页上讲了各种NAT方式,Static NAT, Dynamic NAT, Overloading和Overlapping. 我在上面提到的是最常见的Overloading. 你可以仔细看看。
http://www.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080094831.shtml#examples

的确五个值有一个不同就可以区分,只不过现实中有这样的实现只是你想当然而已。NAT为了节省port去同时根据目标地址及源地址来转发,转换表会相当庞大,实现逻辑会复杂许多。当然如果你有见过这样的NAT设计,麻烦给我网址我去了解一下。
Kymair
2012-12-23 03:01:21 +08:00
@plan9 尝试一下回答你的问题,那就是其实不管是我们的ADSL, 还是大学里的校园网,大部分都是有routable的public IP的。
cabbala
2012-12-23 03:13:32 +08:00
@Kymair 「“NAT做地址转换只是将源地址修改为NAT的对外IP”, 如果NAT只是做这一件事情。。。」

拜托。。不要去较真我给lz做的形象化的解释好么。说粗了较真,说细了你说的也不是全部。。

说了这么多,我觉得我说的不清楚,lz不理解。你既然很了解。。那么正好评论下lz的这几个观点,我也学习学习:

「因为好多服务商提供给你的都是一个局域网的ip,而公网ip是由好多人共有的,但是一个ip只能有6万多个端口,所以如果你长时间使用某个端口的,可能会被你的服务商切断连接,或者你所在的ip已经使用了超过单个ip最大端口数也会被切断连接」

「这个我可以很确定的告诉你,80端口只是连接的时候使用,然后服务器会新开一个端口跟客户端进行通信」

原文评论吧,别扯太多。
cabbala
2012-12-23 03:19:49 +08:00
@Kymair 「尝试一下回答你的问题,那就是其实不管是我们的ADSL, 还是大学里的校园网,大部分都是有routable的public IP的。」

也较下真:
1. ADSL 看运营商,移动和原来的铁通网络,在某些地区就不是公网IP,而是在NAT里
2. 大学校园举个反例,我的母校 南开。虽然确实给分了一些IP,但整个宿舍区的网络出口只有三个IP。。。教育网一个,电信一个,联通一个。 这种情况在国内大学不算少见,说不上大部分都有公网IP
3. 还有大量的人上网用的小区宽带而不是ADSL,所谓的小区宽带,很多地方指的不同。我们那边基本算是去拉根光纤,分个IP,然后搞局域网。


记得以前emule好像有做过统计,国内lowid的比例是很高的。
cabbala
2012-12-23 03:43:30 +08:00
@Kymair 「NAT为了节省port去同时根据目标地址及源地址来转发,转换表会相当庞大,实现逻辑会复杂许多。当然如果你有见过这样的NAT设计,麻烦给我网址我去了解一下。」

找台Linux,开启NAT,怎么开就不用说了吧。。。这个NAT就是你说的实现逻辑很复杂的那种NAT。
cabbala
2012-12-23 03:47:58 +08:00
@Kymair 另外补充一个Linux的iptables内的NAT特性,它会尽量保持端口不变。就如我的例子中所说的那样,192.168.0.2和192.168.0.3的sport都是8888,它通过NAT转换后,端口也是8888,除非这个端口被提前用作它用。

而不是你举得例子中的「source port换成port pool里的可用值比如2002」
Ley
2012-12-23 10:30:37 +08:00
我想求教一下,如果端口被封,该怎么办呢? 自己是通过 Linode 的 VPS 设的一个 L2TP 的 VPN ,但是从开会起,自家的长宽就再也无法连接了,而学校的铁通则一直没有问题。这种情况下,该怎么处理才好?
Kymair
2012-12-23 10:46:19 +08:00
@cabbala 我只是想说明现实中的实现基本上是不会去按目标地址去判断的,Cisco那个网页四种NAT方式均不是这样,运营商做的NAT也不是这样。

关于你所说的iptables的那个NAT特性,麻烦给我链接我去看一下。我想看看根据目标地址进行NAT的实现是怎样的。
Kymair
2012-12-23 11:06:55 +08:00
@cabbala
1. 我已经说了 _大部分_ 是有routable的IP的,并没有说_所有_。我的大学和旁边的都有。如果你需要“大多数”的数据的话,中国电信的固网宽带用户截至11月是8900万户(http://www.chinatelecom-h.com/gb/global/home.htm),而中国的宽带用户去年是1.5亿左右(http://news.sohu.com/20120412/n340313585.shtml)。

2. emule的lowid? 即使我们用的是有公网IP的ADSL, 基本上都会用路由器共享给多人使用。 路由器的WAN是routable的IP, 但我们自己的电脑还是路由器NAT过的
plan9
2012-12-23 12:13:05 +08:00
@Kymair 多谢普及nat知识,受教了
@cabbala
详细跟你解释一下这个
>>这个我可以很确定的告诉你,80端口只是连接的时候使用,然后服务器会新开一个端口跟客户端进行通信
tcp通信的时候,根本不是你想像的那样,服务器开一个端口,然后就通过这个端口与客户端连接了.正确的是这样
1,服务器打开80端口并进行监听,这个端口只是用来监听用的,具体通信的时候并不使用(专业术语忘记叫什么了)
2,客户端打开一个通信用的端口,连接服务器的80端口
3,服务器打开一个新的通信用端口,通过这个端口与客户端进行通信,这个过程防火墙是不会进行干扰的

这个不是我瞎说的,如果我没记错的话应该是[UNIX网络编程]这本书
http://www.amazon.cn/s/ref=nb_sb_noss_1/475-4931510-8706610?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=unix+network+programming

再说一下我所理解的端口复用
比如你通过80端口入侵了某个服务器,但是对方防火墙设置了只有80端口可以访问,这时候你会让对方服务器监听本地8000端口,然后让你的程序监听80端口,当有正常的http过来的时候,你的程序转发到本地8000端口上面,然后当你的连接过去的时候你的程序会进行某些你所想要的动作.所以说端口复用开始打开了2个端口的

至于nat,@Kymair的解释应该是很全面了
plan9
2012-12-23 12:19:25 +08:00
@Ley
这个不好说是运营商还是墙的问题,@wwwjfy上面已经说了我的判断比较武断
如果是运营商的问题的话你可以断下网,重新获取一个ip试试,如果是墙的话就不知道该怎么办了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX