b***d 发帖数: 186 | 1 一道面试题
我抓脑袋想不出来,帮我想想
家里一台电脑A ip 11.22.33.44
公司一台电脑B ip 55.66.77.88 这电脑还有另外一个interface,可以连到公司内部
100台电脑10.1.1.100~10.1.1.199
A可以ssh到B,但是不能直接ssh到公司内部电脑10
问做了什么操作后,可以在A和B直接建立某种连接,使得在家里A电脑上直接访问10.1.
1.100:123 或一百台电脑中任一台的任一端口都可以直接访问。
所有server均运行Linux
已知答案不是在AB间建VPN
也不能用 ssh tunnel with -w option
也不能用 iptables
据说还是特别简单的办法,不需要特别的软件支持。 |
N****w 发帖数: 21578 | 2 static routing?
1.
【在 b***d 的大作中提到】 : 一道面试题 : 我抓脑袋想不出来,帮我想想 : 家里一台电脑A ip 11.22.33.44 : 公司一台电脑B ip 55.66.77.88 这电脑还有另外一个interface,可以连到公司内部 : 100台电脑10.1.1.100~10.1.1.199 : A可以ssh到B,但是不能直接ssh到公司内部电脑10 : 问做了什么操作后,可以在A和B直接建立某种连接,使得在家里A电脑上直接访问10.1. : 1.100:123 或一百台电脑中任一台的任一端口都可以直接访问。 : 所有server均运行Linux : 已知答案不是在AB间建VPN
|
b***d 发帖数: 186 | 3 A和B不在同一个网段啊,隔着千山万水呢,咋就能把10.X.X.X的地址给route到B去的呢
【在 N****w 的大作中提到】 : static routing? : : 1.
|
N****w 发帖数: 21578 | 4 那加 PPTP
【在 b***d 的大作中提到】 : A和B不在同一个网段啊,隔着千山万水呢,咋就能把10.X.X.X的地址给route到B去的呢
|
b***d 发帖数: 186 | 5 都linux好像pptp不灵光啊。而且pptp不是vpn的一种吗。已经说了vpn不是他想要的答案
【在 N****w 的大作中提到】 : 那加 PPTP
|
x*****n 发帖数: 1636 | 6 pptp很灵光,只是它是vpn
答案
【在 b***d 的大作中提到】 : 都linux好像pptp不灵光啊。而且pptp不是vpn的一种吗。已经说了vpn不是他想要的答案
|
x*****n 发帖数: 1636 | 7 这个有问题吧?不开nat的话,10段其他机器收到来自B转发A的包之后送到哪里去?
除非B是10段的网关,或者至少是10到A的网关
10. |
x*****n 发帖数: 1636 | 8 lz说不能用vpn嘛,pptp是一种vpn的实现方式 |
h*******x 发帖数: 12808 | 9 仔细想了一下,有点小问题。
在A上,我可以设定把目的地址是10.1.1.0/24的包转发到55.66.77.88,但是如何找55.
66.77.88又要重新路由,毕竟11.22.33.44不在一个网络中,一跳之内完不成,不晓得
能不做到递归去找,理论是可以,但是我没有在linux下面是试验过,不敢确定。刚刚
把话说的太满了,先删掉了。
你说那个到不是问题,我第一句话就假设10.1.1.0/24知道如何连接外网的A,怎么连到
A不重要,通过B也好,通过其他的网关也好,这个都无所谓,只要能把packet送到A就
行。但是中间决不能有NAT,否则不行,因为源地址混乱了。
通常情况下呢,没有NAT,从10.1.1.0/24的主机发出来的包的源地址还是10.1.1.0/24
的地址,公网的机器不知道如何路由到10.1.1.0/24网段上去,应答的packet送不回去
,tcp连接无法建立,更不用说ssh了。NAT把来自10.1.1.0/24的主机的packet的源地
址替换成公网的地址,并做好映射,这样让公网主机可以把应答包送回去。
但是如果只想建立A到10.1.1.0/24 TCP连接,那就没有这个问题。因为你可以告诉A如
何找到10.1.1.0/24的地址,这样packet可以从10.1.1.0/24的主机送到A,A也可以把
packet送回来,通信就不成问题。不过你不可能告诉所有的电脑如何路由到你的10.1.1
.0/24的网段中,想要10段的主机访问任意的外网,就需要nat了。同样这里如果10段
到A的路径上有nat也不行,比如A发给10.1.1.1一个SYN,但是10.1.1.1发给A的SYN-AC
K的源地址被NAT替换成了别的地址,A收不到源地址是10.1.1.1的SYN-ACK,tcp还是建
立不起来。
所以如果题目要求10段机器又能随意访问外网电脑,又希望A能够ssh到10段主机,那就
麻烦一些了。10段的电脑对A的路由,也需要单独配置。或者在NAT的主机上,对A的地
址单独处理一下。不过linux里面NAT还是要用到iptables,只能用别的办法了。幸好
题目没有这个要求:)
内部
实际
内部
【在 x*****n 的大作中提到】 : 这个有问题吧?不开nat的话,10段其他机器收到来自B转发A的包之后送到哪里去? : 除非B是10段的网关,或者至少是10到A的网关 : : 10.
|
x*****n 发帖数: 1636 | 10 对啊,不用iptables的话,我觉得必须要配B为10段到A的路由,不过这样搞多麻烦,还
不如直接iptables nat呢
55.
24
【在 h*******x 的大作中提到】 : 仔细想了一下,有点小问题。 : 在A上,我可以设定把目的地址是10.1.1.0/24的包转发到55.66.77.88,但是如何找55. : 66.77.88又要重新路由,毕竟11.22.33.44不在一个网络中,一跳之内完不成,不晓得 : 能不做到递归去找,理论是可以,但是我没有在linux下面是试验过,不敢确定。刚刚 : 把话说的太满了,先删掉了。 : 你说那个到不是问题,我第一句话就假设10.1.1.0/24知道如何连接外网的A,怎么连到 : A不重要,通过B也好,通过其他的网关也好,这个都无所谓,只要能把packet送到A就 : 行。但是中间决不能有NAT,否则不行,因为源地址混乱了。 : 通常情况下呢,没有NAT,从10.1.1.0/24的主机发出来的包的源地址还是10.1.1.0/24 : 的地址,公网的机器不知道如何路由到10.1.1.0/24网段上去,应答的packet送不回去
|
|
|
h*******x 发帖数: 12808 | 11 只用iptables nat,A还是没有办法建立到10段主机的TCP连接啊,那就没法ssh喽。只
能保证10段的主机ssh到A。
而且即使B是10段的路由,不采用端口映射之类的机制,还解决不了最后的问题。key
point不是这里。
晓得
刚刚
连到
A就
回去
【在 x*****n 的大作中提到】 : 对啊,不用iptables的话,我觉得必须要配B为10段到A的路由,不过这样搞多麻烦,还 : 不如直接iptables nat呢 : : 55. : 24
|
x*****n 发帖数: 1636 | 12 我的意思是A设到10的网关为B,B上做nat转发A到10的数据包
【在 h*******x 的大作中提到】 : 只用iptables nat,A还是没有办法建立到10段主机的TCP连接啊,那就没法ssh喽。只 : 能保证10段的主机ssh到A。 : 而且即使B是10段的路由,不采用端口映射之类的机制,还解决不了最后的问题。key : point不是这里。 : : 晓得 : 刚刚 : 连到 : A就 : 回去
|
h*******x 发帖数: 12808 | 13 那不就是我刚刚说的问题么。
A试图SSH到10.1.1.1吧,先得建一个tcp连接吧,发一个SYN (IP.A, 10.1.1.1)
10.1.1.1的主机收到这包之后,发SYN-ACK(10.1.1.1,IP.A)包回去。但是这个SYN-
ACK路过B的时候,被B的NAT修改成(IP.B,IP.A),发给A。
最后A收到SYN-ACK(IP.B,IP.A),不过A在等待的包是SYN-ACK(10.1.1.1,IP.A),因
此SYN-ACK(IP.B,IP.A)只能被丢弃。最后A等不到SYN-ACK(10.1.1.1,IP.A),超时,
放弃连接。
。只
key
【在 x*****n 的大作中提到】 : 我的意思是A设到10的网关为B,B上做nat转发A到10的数据包
|
j*a 发帖数: 14423 | 14 ssh可以做socks5 proxy
1.
【在 b***d 的大作中提到】 : 一道面试题 : 我抓脑袋想不出来,帮我想想 : 家里一台电脑A ip 11.22.33.44 : 公司一台电脑B ip 55.66.77.88 这电脑还有另外一个interface,可以连到公司内部 : 100台电脑10.1.1.100~10.1.1.199 : A可以ssh到B,但是不能直接ssh到公司内部电脑10 : 问做了什么操作后,可以在A和B直接建立某种连接,使得在家里A电脑上直接访问10.1. : 1.100:123 或一百台电脑中任一台的任一端口都可以直接访问。 : 所有server均运行Linux : 已知答案不是在AB间建VPN
|
b***d 发帖数: 186 | 15 谢谢大家的热烈讨论。昨晚太累了先睡了。
原问题我不知道是不是没理解清楚面试者的意思。那哥们说话又块又有口音又小声。真
是点种我语言的死穴。
问题是由ssh tunnel引过来的。我们知道在做ssh tunnel是往往是把一个port tunnel
到另外一个机器的另外一个port上。然后他就提出假设他要随机访问1w个port,难道还
一个个的建tunnel吗?我答不上来方法。他说他至少有2办法。
然后他就画了我在顶楼描述的模型。那哥们先提醒说可以用 ssh -w 的命令建一个
tunnel。这个命令我没用过,刚刚查了查好像可行。但是他说这个方法要A和B都参与进
来建立这个tunnel才行。他还有个办法可以只要一方参与。我那时已经彻底晕菜了,就
乱问 proxy?vpn?iptables?全都被否了。
另外楼上提到将B设成路由的,好像也得用iptables吧
谁用过ip tunnel add? 不知这个可不可行。
【在 j*a 的大作中提到】 : ssh可以做socks5 proxy : : 1.
|
h**********c 发帖数: 4120 | 16 好像叫网桥吧
记得当年考mcse的时候,server 2000 就可以桥接两块网卡,
吧? |
j*a 发帖数: 14423 | 17 ip tunnel add这个要有end-to-end connectivity
你只能ssh访问的 不会work的
tunnel
【在 b***d 的大作中提到】 : 谢谢大家的热烈讨论。昨晚太累了先睡了。 : 原问题我不知道是不是没理解清楚面试者的意思。那哥们说话又块又有口音又小声。真 : 是点种我语言的死穴。 : 问题是由ssh tunnel引过来的。我们知道在做ssh tunnel是往往是把一个port tunnel : 到另外一个机器的另外一个port上。然后他就提出假设他要随机访问1w个port,难道还 : 一个个的建tunnel吗?我答不上来方法。他说他至少有2办法。 : 然后他就画了我在顶楼描述的模型。那哥们先提醒说可以用 ssh -w 的命令建一个 : tunnel。这个命令我没用过,刚刚查了查好像可行。但是他说这个方法要A和B都参与进 : 来建立这个tunnel才行。他还有个办法可以只要一方参与。我那时已经彻底晕菜了,就 : 乱问 proxy?vpn?iptables?全都被否了。
|
c**********1 发帖数: 904 | 18 我是外行啊,
难道是把host only 变成 bridge? |