有没有朋友会调教 Linux 网络?能否给我支个招呢?

2015-03-07 19:30:01 +08:00
 liuchen9586
拓扑图是这样的:



中国境内服务器接受连接的虚拟网卡IP是172.16.36.1,与HK服务器链接的虚拟网卡IP是10.7.0.1
HK与中国境内服务器链接的虚拟网卡IP是10.7.0.2

左边区域是中国境内的服务器,右边区域是通往境外的,两个区域内网IP段不同。
我想实现的效果是,我通过VPN协议拨入位于中国境内的服务器,而我的数据出口最终是从HK出来的(因为企业宽带比家用宽带稳定些),而中国境内的服务器本身通信的数据不受影响,仍然从eth0走。
我现在的做法就是在HK服务器上直接对10.7.0.0/24这个网段的数据做NAT
-A POSTROUTING -s 10.7.0.0/24 -o eth0 -j MASQUERADE

然后我在中国境内服务器上做NAT
-A POSTROUTING -o tun0 -s 172.16.36.0/24 -j SNAT --to-source 10.7.0.1

结果这样上不了网,只能链接中国服务器的SSH。是不是我哪一步没做到位?大家可以给我指点下吗?
5272 次点击
所在节点    Linux
21 条回复
soiidseg
2015-03-07 20:35:58 +08:00
为何不在境内服务器用iptables或者haproxy之类的做转发?
liuchen9586
2015-03-07 20:37:54 +08:00
@soiidseg haproxy是基于TCP层的,我这是IP层的数据转发,行不通
我上面写的就是iptables命令,不成功
soiidseg
2015-03-07 20:42:04 +08:00
@liuchen9586 你用的哪个vpn协议?
twl007
2015-03-07 20:43:08 +08:00
没做snat吧……
ipconfiger
2015-03-07 20:43:44 +08:00
试试socat
liuchen9586
2015-03-07 21:13:16 +08:00
@soiidseg 我感觉协议不是很重要吧,最重要的是隧道通?或者说有关系?我也不太清楚
用户连中国服务器用PPTP,中国中转服务器连HK用的shadowvpn

@ipconfiger socat,haproxy是基于TCP层的,我的是IP层的。


@twl007 中国的像HK转发我做了SNAT啊,不通(看上面命令
twl007
2015-03-07 21:22:56 +08:00
@liuchen9586 看错了 是没做NAT 额 弄一下prerouting 然后用iptables -L查看一下要有对应的NAT和SNAT纪录
gamexg
2015-03-07 21:32:19 +08:00
很久没弄网络了,具体命令记不清了。大概做法是:
在 china server 上面另加一个路由表X,并设置这个路由表的默认路由是 HK server 虚拟网卡IP。
然后 iptables 指定china 客户的连接使用路由表X。

你现在直接设置的SNAT,造成china 客户发起的请求出口地址变成了内网地址,但是IP包转发是依靠目的地址匹配路由表来走的。目的地址没有变,还是走的国内的上级网关,但是源地址是内网地址,会被上级路由器丢掉的。
gamexg
2015-03-07 21:38:56 +08:00
http://biancheng.dnbcw.info/linux/418649.html
linux 高级路由即基于策略的路由比传统路由在功能上更强大,使用也更灵活,它不仅能够根据目的地址来转发路径而且也能够根据报文大小、应用或ip源地址来选择路由转发路径从而让系统管理员能轻松做到。


http://itoedr.blog.163.com/blog/static/12028429720135237643677
linux路由工具:iproute2/iptables(路由配置实例)
ryd994
2015-03-08 00:30:35 +08:00
iptables mark一下,然后ip route选择出口
zk8802
2015-03-08 10:50:52 +08:00
1. 你在中国的服务器上开 IPv4 转发了吗?
echo 1 > /proc/sys/net/ipv4/ip_forward

2. 假设中国服务器的虚拟网卡是 xxx,你应该为来自网卡 xxx 的数据指定默认路由为 10.7.0.2。
ip route add default via 10.7.0.2 dev xxx table 101
ip rule add from 172.16.36.0/24 lookup 101
JackWindows
2015-03-08 11:01:53 +08:00
ls正解,lz路由都没配,172.16.36.0/24怎么知道自己的out interface是tun0呢?
lujiajing1126
2015-03-08 11:35:02 +08:00
调试一下iptables呗。。你的包肯定被吃掉了
sudo iptables -L -nv
lujiajing1126
2015-03-08 11:46:28 +08:00
我感觉这个样子的好像不太对
如果vpn的话,你拨号上去,你的client机器和两台服务器应该处于同一内网网段192.168.122.X
这时候你的client直接用HK的机器的内网ip做代理就好了吧
HK机器上面加squid或者其他的代理。。
配路由表啥的。。很容易把网络直接配挂掉
datocp
2015-03-08 13:26:54 +08:00
已经看得很晕了。个人觉得要选也要选得公认的好用的文档齐全的vpn

https://www.softether.org/4-docs/1-manual/A._Examples_of_Building_VPN_Networks/10.6_Build_a_LAN-to-LAN_VPN_(Using_L3_IP_Routing)
有点像推送路由表的味道,据说openvpn很好实现。softether似乎没测试成功。
xylophone21
2015-03-08 18:28:27 +08:00
需求是:
而我的数据出口最终是从HK出来的(因为企业宽带比家用宽带稳定些),而中国境内的服务器本身通信的数据不受影响

简化来说就是HK的走HK,CN的走CN. 那你连VPN干什么?

你的描述实在有些费解.
比如你到底是谁,你在哪里?eth0是哪个?

还有Linux Server China是放在深圳湾吗?
liuchen9586
2015-03-08 19:03:12 +08:00
@zk8802
@datocp
@lujiajing1126
@JackWindows 好像是路由表的问题,我现在在看Linux的IP RULE用法,看的有点晕orz
lujiajing1126
2015-03-08 20:10:11 +08:00
@liuchen9586
ip rule 是用来做策略路由的。。可以根据源地址进行策略路由
liuchen9586
2015-03-08 20:15:48 +08:00
@lujiajing1126 以前不知道有ip rule这东西……是我想当然了
rwzsycwan
2015-03-09 13:02:42 +08:00
这是做跳板??

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

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

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

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

© 2021 V2EX