linux,生成虚拟网卡,指定此虚拟网卡的数据流走向,如何做?

2015-12-16 18:32:31 +08:00
 yalltd

ubuntu 系的 OS ,跑几个虚拟机,每个虚拟机需要不同的代理,加上客户机的操作系统有些是偏门 linux 和过时的 XP ,调试不同的代理很麻烦,我想这样:

[1] 在主机上生成几个虚拟网卡

[2] 每个虚拟网卡分别设定不同的走向,比如
vnet0 走 127.0.0.1:10000 ,
vnet1 走 127.0.0.1:20000,
vnet2 走 192.168.1.111:1080,
vnet3 走 172.16.66.123:1024 ……

[3] 每台虚拟机的网络设定为“桥接”到特定的虚拟网卡,实现该虚拟 OS 全系统走指定代理

那么问题来了: linux 系统上生成虚拟网卡用什么程序来实现比较好?然后指定每个虚拟网卡的走向又要用什么程序来实现?(本人小白啊)

谢谢各位大侠

14614 次点击
所在节点    Linux
35 条回复
billlee
2015-12-16 19:55:25 +08:00
你这思路有问题
应该让主机作为虚拟机的默认网关,用 iptables REDIRECT 来转代理
不懂网络基础没那么容易做的
yalltd
2015-12-16 20:18:47 +08:00
@billlee 确实,我不是科班出身的,网络基础比较欠缺…
这会搜索了几轮,好像 iptables 是必须要用到的,您可以略微详细的说一下如何“让主机作为虚拟机的默认网关”吗?如果以 VMware 为例,虚拟机的网卡应该是 NAT 还是 host-only ?然后 iptables 的命令该怎么写?
谢谢
billlee
2015-12-16 20:51:50 +08:00
@yalltd host-only
重定向 TCP 连接到到 127.0.0.1:10000
iptables -t nat -A PREROUTING -s 虚拟机的 IP -p tcp -j REDIRECT --to-ports 10000
这里接受连接的代理服务器必须支持 iptables REDIRECT, 才能根据到 REDIRECT 之前目的地址来作代理。
透明转发到其它主机的代理服务器恐怕不太好做
raysonx
2015-12-16 21:08:25 +08:00
@billlee 看見樓主貼的其中一個代理服務器使用 1080 端口,我懷疑這些代理服務器是 SOCKS 代理。
如果真的是 SOCKS 代理的話,就有些麻煩了,因為 SOCKS 畢竟是應用層的協議,直接轉發協議不兼容。

個人建議,代理僅用於訪問 WEB 或者給個別應用使用,而不要使用代理組網。
yalltd
2015-12-17 01:07:47 +08:00
@billlee 我试着运行了“ iptables -t nat -A PREROUTING -s 172.16.52.129 -p tcp -j REDIRECT --to-ports 1200 ”,但是虚拟系统无法上网, firefox 打不开网页, ping 外网也 ping 不通,这个方法可能不行

然后,添加的这个规则怎么删除??
yalltd
2015-12-17 01:12:01 +08:00
@raysonx 是的,是 socks 的代理

现在的情况是:如果只是访问网页的话,虚拟系统里的浏览器是没有问题的,但是,浏览器之外的软件就很麻烦,我是希望做到整个虚拟机全局走代理,您可以给点建议吗?
yalltd
2015-12-17 01:26:07 +08:00
@billlee 等一下,好像有哪里不对。我运行“ iptables --list-rules ”,找不到关于 172.16.52.×的规则,前面运行的那条命令没效?

别笑我,这是第一次摸索 iptables ,处女摸
raysonx
2015-12-17 01:29:30 +08:00
@yalltd
首先說 SOCKS 協議的限制: SOCKS 代理只支持 TCP 協議, UDP 協議的話需要 SOCK5 才支持。 ping 命令走的是 ICMP 協議,所以不可能 ping 得通的。
如果非要實現全局走代理的話,需要配置透明代理,你需要一個支持透明代理軟件,配置透明代理比較麻煩。
如果不涉及機密信息的話,建議題主仔細描述一下場景和需求,讓大家看看除了代理還有沒有其他方案。透明代理是最後的方法。

刪除那條規則的話,先 iptables -t -L PREROUTING 數一數剛剛插入的規則是第幾條,然後 iptables -t nat -D 序號 刪除。也可以直接重啓防火牆。
raysonx
2015-12-17 01:30:27 +08:00
@raysonx iptables -t nat -L PREROUTING
yalltd
2015-12-17 03:14:45 +08:00
@raysonx 运行 iptables -t nat -L PREROUTING 之后显示:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 172.16.52.129 anywhere redir ports 1200
REDIRECT udp -- 172.16.52.129 anywhere redir ports 1200

udp 是我后来加的,没有看到编号,我就试着“ iptables -t nat -D 2 ”先删 udp 那个,但是错误,提示“ iptables: Bad rule (does a matching rule exist in that chain?)”,再试着“ iptables -t nat -D 1 ”还是一样的错误……

我又试着运行“ iptables -t nat -L PREROUTING --line-number ”,这下看到编号了,就是 1 和 2 ,咋回事?删都不让我删?

重启防火墙是不是 /etc/init.d/iptables stop 然后 /etc/init.d/iptables start ?如果重启规则就没有了的话,那岂不是每次重启机器都要把那些设置的命令再运行一次?

摸索一个新东西还是蛮有挑战性的

那啥,就一门心思的研究如何实现虚拟机全系统的透明代理吧,请您再指点指点:)
msg7086
2015-12-17 06:20:00 +08:00
1. 删除一条规则就是把加入规则时候的 -I 或者 -A 换成 -D 就是删除了。
2. 网卡是链路层设备,你的代理是应用层代理,两回事。底层的流量没法直接发往高层。
3. Linux 自己就可以处理网卡生成。虚拟 IP 虚拟网卡都可以做。
raysonx
2015-12-17 09:36:26 +08:00
@yalltd iptables -t nat -D PREROUTING 編號
我漏了那個 PREROUTING 的名字。
規則你要保存的話。要用
service iptables save
datocp
2015-12-17 09:54:46 +08:00
stunnel 有个 socks vpn 透明代理实现,可以说所有的透明代理实例都没配置成功过。

参考别人的 vpn 分流,差不多花了半个月才解决,很多文档转载转载再转载,很多关键步骤都遗漏了,这篇文档的 systl.conf 和 MASQUERADE 也是零星散步在网络论坛讨论中。
http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html
raysonx
2015-12-17 12:57:41 +08:00
用代理組網本身是一種很骯髒方式,樓主去搜一下有哪些好的透明代理吧。
而建議的方式是配置多個網關,由路由規則指定走向。
yalltd
2015-12-17 15:06:22 +08:00
@msg7086 Linux 自己就可以处理网卡生成。虚拟 IP 虚拟网卡都可以做
怎么实现的?命令行还是改配置文件?
msg7086
2015-12-17 15:11:24 +08:00
@yalltd 都可以。
但是这要看你用的是哪个发行版了。不同发行版的配置方法都不一样的。
yalltd
2015-12-17 16:25:28 +08:00
@msg7086 我现在的系统是 ubunt14.04 ,命令行怎么做?
yalltd
2015-12-17 16:33:11 +08:00
@datocp 反复看了两遍,还是没抓住内涵,那些 iptables 的命令我看的云里雾里……但是好像他里面也出现了 tun ,我昨晚也搜到了 tun/tap 的东西,好像有我想要的,但是英文的东西看着累……
yalltd
2015-12-17 16:36:09 +08:00
@raysonx 全局的透明代理我现在只搜到一个 Stunnel ,可以用它吗?
billlee
2015-12-17 21:34:54 +08:00
@yalltd redsocks 可以支持 iptables REDIRECT, 印象中 shadowsokcs-android 用的就是这个
UDP 理论上 netfilter 的 TPROXY 可以支持,但是好像没见过有相关的用户空间程序。

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

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

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

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

© 2021 V2EX