最近调试一款相机,内置的ubuntu系统,通过网线直连到笔记本电脑,支持ssh登录相机,但为方便调试准备在相机里安装xrdp环境,使用远程桌面连接过去测试图形程序。直接交叉编译xrdp较为繁琐,考虑到windows和linux都支持跨网段的报文转发,可以将相机apt-get上来的报文转发至无线网卡,由无线网卡发送至外网服务器。
网络拓扑介绍:
相机ip:192.168.0.244,网线直连笔记本电脑
笔记本电脑ip:
192.168.0.10(有线,直连的相机)
192.168.43.142(无线网卡)
方法一:使用windows内置的netsh端口转发功能,将相机的目标报文由windows作为代理服务转发至外网
首先确保windows满足以下条件:
1. 防火墙例外端口或关闭
2. Win7以上的IP Helper服务启动
3. Net.tcp Port sharing service服务启动
使用管理员权限打开cmd,输入以下命令:
netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.0.10 connectport=80 connectaddress=202.141.160.110
其他netsh interface相关命令:
查看端口转发列表:
netsh interface portproxy show all
or
netsh interface portproxy show v4tov4
删除或重置端口转发:
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=192.168.0.10
or
netsh interface portproxy reset
防火墙相关:
netsh Advfirewall set allprofiles state off
netsh Advfirewall show allprofiles
netsh advfirewall set allprofiles state on
netsh interface portproxy基本格式如下:
netsh interface portproxy add v4tov4 listenaddress=[监听地址] listenport=[监听端口] connectaddress=[目标地址] connectport=[目标端口]
netsh interface portproxy delete v4tov4 listenaddress=[监听地址] listenport=[监听端口]
help:
netsh interface portproxy add v4tov4 help
apt-get使用的是http协议,用的80端口,因此我们选择监听相机连接过来的网卡ip,并选择监听80端口,我选择的是ustc的apt源,ping下就可以得到目标ip地址202.141.160.110,同样目标端口选择80端口。另外还需要修改相机的/etc/hosts配置,添加如下一行:
192.168.0.10 mirrors.ustc.edu.cn
该配置可以将apt源的域名 "mirrors.ustc.edu.cn" 映射到直连笔记本电脑侧的网卡ip地址(监听端),这样相机会将apt报文发往笔记本电脑的192.168.0.10网卡,之后电脑会将该报文通过无线网卡转发至真正的ustc镜像网站202.141.160.110的80端口。自此相机到ustc镜像源之间就正式牵手成功了 ^_^
拓展:相机DNS服务报文转发
/etc/resolvconf/resolv.conf.d/head
nameserver 192.168.0.10
# use-vc强制DNS使用 tcp方式,而非默认的udp
options use-vc
dns服务的默认端口是53,一般使用udp来查询,而netsh目前仅支持tcp,use-vc选项可以强制dns使用tcp模式查询。
方法二:配置无线网卡为共享模式,将连接到相机端的有线网卡配置成网关模式
方法一的局限是每一种服务都需要由netsh建立一条通道直达目标服务器,此后80端口的报文就只能发往ustc镜像服务器,整个过程应该是建立于tcp/ip协议之上。另一种一劳永逸的方法是将windows连到相机端的有线网卡配置成网关功能,在协议栈的更底层完成数据转发,方法是将接到外网的无线网卡配置成共享模式,如图所示:
“家庭网络连接”选择以太网(直连相机的网卡),将接有相机的本地连接加入到共享局域网中,Windows "Internet连接共享" 默认使用192.168.137.1做为网关,因此系统会自动将本地连接的ip配置为192.168.137.1。
相机端的配置,需要将方法一中相机的/etc/hosts等配置还原,并修改相机ip地址为192.168.137.0/24网段,添加相机默认网关为192.168.137.1,命令如下:
ifconfig eth0 192.168.137.244 netmask 255.255.255.0
route add default gw 192.168.137.1
此时相机的所有网络报文都会丢给网关192.168.137.1,而后windows系统将报文交由无线网卡透传到外网服务器,此后相机就可以正常访问外网资源而不会受到限制了。