@cyysu
2017-10-06T08:16:44.000000Z
字数 11867
阅读 2070
- 时间:2017年10月6日
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com
- 版本:3.0
- 描述:内网穿透工具系列之frp
内网映射
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
# 切换到需要安装的目录mj@DZ:~$ cd /usr/local# 安装依赖mj@DZ:/usr/local$ sudo apt-get install bison ed gawk gcc libc6-dev make[sudo] mj 的密码:正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成bison 已经是最新版 (2:3.0.4.dfsg-1)。ed 已经是最新版 (1.10-2)。gawk 已经是最新版 (1:4.1.3+dfsg-0.1)。gcc 已经是最新版 (4:5.3.1-1ubuntu1)。make 已经是最新版 (4.1-6)。libc6-dev 已经是最新版 (2.23-0ubuntu9)。下列软件包是自动安装的并且现在不需要了:binutils-arm-linux-gnueabi cpp-5-arm-linux-gnueabi cpp-arm-linux-gnueabigcc-5-arm-linux-gnueabi-base gcc-5-cross-base gyp libasan2-armel-crosslibatomic1-armel-cross libc6-armel-cross libc6-armhf-armel-crosslibc6-armhf-cross libc6-dev-armel-cross libc6-dev-armhf-armel-crosslibc6-dev-armhf-cross libgcc-5-dev-armel-cross libgcc1-armel-crosslibgomp1-armel-cross libhfasan2-armel-cross libhfatomic1-armel-crosslibhfgcc-5-dev-armel-cross libhfgcc1-armel-cross libhfgomp1-armel-crosslibhfstdc++6-armel-cross libhfubsan0-armel-cross libjs-inheritslibjs-node-uuid libjs-underscore libstdc++6-armel-crosslibubsan0-armel-cross libuv1 libuv1-dev libxfce4util-bin libxfce4util-commonlibxfce4util7 libxfconf-0-2 linux-headers-4.10.0-32linux-headers-4.10.0-32-generic linux-headers-4.8.0-36linux-headers-4.8.0-36-generic linux-image-4.10.0-32-genericlinux-image-4.8.0-36-generic linux-image-extra-4.10.0-32-genericlinux-image-extra-4.8.0-36-generic linux-libc-dev-armel-crosslinux-libc-dev-armhf-cross xfconf使用'sudo apt autoremove'来卸载它(它们)。升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 117 个软件包未被升级。mj@DZ:/usr/local$# 打开下面网址 选择自己需要的版本下载http://www.golangtc.com/static/go/# 或者用下面网址进行直接下载go1.9版本mj@DZ:/usr/local$ sudo wget https://www.golangtc.com/static/go/1.9/go1.9.linux-amd64.tar.gz--2017-10-06 15:12:51-- https://www.golangtc.com/static/go/1.9/go1.9.linux-amd64.tar.gz正在解析主机 www.golangtc.com (www.golangtc.com)... 47.91.167.48正在连接 www.golangtc.com (www.golangtc.com)|47.91.167.48|:443... 已连接。已发出 HTTP 请求,正在等待回应... 200 OK长度: 102601309 (98M) [application/x-gzip]正在保存至: “go1.9.linux-amd64.tar.gz”# 解压go软件mj@DZ:/usr/local$ tar xf go1.9.linux-amd64.tar.gzmj@DZ:/usr/local$ sudo cp go/bin/go /usr/bin/# 设置go环境变量mj@DZ:/usr/local$ vim ~/.bashrc# 写入下面的内容export GOROOT=/usr/local/goexport GOBIN=/usr/local/go/binexport GOPATH=/usr/local/gopathexport PATH=$PATH:$GOBIN# 使环境变量生效mj@DZ:/usr/local$ source ~/.bashrc# 查看go版本mj@DZ:/usr/local$ go versiongo version go1.9 linux/amd64# 下载frpmj@DZ:/usr/local$ go get github.com/fatedier/frp# 当下载完之后,就会在gopath中垂涎如下的目录以及文件mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ pwd/usr/local/gopath/src/github.com/fatedier/frpmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ lsassets client conf Dockerfile frpc_linux_arm Godeps Makefile models README.md server utils webbin cmd doc Dockerfile_alpine frps_linux_arm LICENSE Makefile.bak package.sh README_zh.md tests vendormj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$# 修改交叉编译的makefile# 这里编译默认是编译本地架构类型的执行文件mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ makego fmt ./assets/...go fmt ./client/...go fmt ./cmd/...go fmt ./models/...go fmt ./server/...go fmt ./utils/...go build -o bin/frps ./cmd/frpsgo build -o bin/frpc ./cmd/frpc# 如果编译其他类型 那么执行一下操作mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ mv Makefile Makefile.bakmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ mv Makefile.cross-compiles Makefilemj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ cat Makefileexport PATH := $(GOPATH)/bin:$(PATH)export GO15VENDOREXPERIMENT := 1LDFLAGS := -s -wall: buildbuild: appapp:env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_darwin_amd64 ./cmd/frpcenv CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_darwin_amd64 ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_386 ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_386 ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_arm ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frps_linux_arm ./cmd/frpsenv CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_386.exe ./cmd/frpcenv CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_386.exe ./cmd/frpsenv CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_amd64.exe ./cmd/frpcenv CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_amd64.exe ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64 ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64 ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64le ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64le ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips ./cmd/frpsenv CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mipsle ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mipsle ./cmd/frpsPC:env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frpsARM:env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_arm ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frps_linux_arm ./cmd/frps# 接下来就可以编译了# 编译PC平台mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ make PCenv CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_linux_amd64 ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frps_linux_amd64 ./cmd/frps# 编译ARM平台mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ make ARMenv CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o ./frpc_linux_arm ./cmd/frpcenv CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o ./frps_linux_arm ./cmd/frps# 查看编译出来的文件mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ lsassets client conf Dockerfile frpc_linux_amd64 frps_linux_amd64 Godeps Makefile models README.md server utils webbin cmd doc Dockerfile_alpine frpc_linux_arm frps_linux_arm LICENSE Makefile.bak package.sh README_zh.md tests vendor# 查看文件类型mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frpc_linux_armfrpc_linux_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, strippedmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frpc_linux_amd64frpc_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, strippedmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frps_linux_amd64frps_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, strippedmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frps_linux_armfrps_linux_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, strippedmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$
# 我们这里将演示两个平台 ARM平台当做是服务器 Linux平台当做客户端mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ cd bin/mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp/bin$ lsfrpc frpc.ini frps staticmj@DZ:/usr/local/gopath/src/github.com/fatedier/frp/bin$mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp/bin$ cat frpc.ini[common]server_addr = 192.168.88.230server_port = 7000[ssh]type = tcplocal_ip = 10.0.0.78local_port = 22remote_port = 6000 #访问服务器的6000端口就是访问内网的22端口
[root@3352-T chen]# lsfrps_linux_arm* frpc_linux_arm* frps.ini[root@3352-T chen]# cat frps.ini[common]bind_addr = 0.0.0.0bind_port = 7000vhost_http_port = 80vhost_https_port = 443dashboard_user = admindashboard_pwd = admindashboard_port = 7500auth_token = 123[ssh]bind_addr = 0.0.0.0listen_port = 6000
[root@3352-T chen]# ./frps_linux_arm -c ./frps.ini1970/01/01 00:46:43 [I] [service.go:83] frps tcp listen on 0.0.0.0:70001970/01/01 00:46:43 [I] [service.go:108] http service listen on 0.0.0.0:801970/01/01 00:46:43 [I] [service.go:124] https service listen on 0.0.0.0:4431970/01/01 00:46:43 [I] [service.go:134] Dashboard listen on 0.0.0.0:75001970/01/01 00:46:43 [I] [main.go:112] Start frps success1970/01/01 00:46:43 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp/bin$ ./frpc -c ./frpc.ini2017/10/06 15:38:46 [I] [control.go:276] [f1de66317eeb0c11] login to server success, get run id [f1de66317eeb0c11]2017/10/06 15:38:46 [I] [control.go:411] [f1de66317eeb0c11] [http_proxy] start proxy success2017/10/06 15:38:46 [I] [control.go:411] [f1de66317eeb0c11] [ssh] start proxy success
# 这个时候ARM服务器端出现的内容如下[root@3352-T chen]# ./frps_linux_arm -c ./frps.ini1970/01/01 00:48:12 [I] [service.go:83] frps tcp listen on 0.0.0.0:70001970/01/01 00:48:12 [I] [service.go:108] http service listen on 0.0.0.0:801970/01/01 00:48:12 [I] [service.go:124] https service listen on 0.0.0.0:4431970/01/01 00:48:12 [I] [service.go:134] Dashboard listen on 0.0.0.0:75001970/01/01 00:48:12 [I] [main.go:112] Start frps success1970/01/01 00:48:12 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues1970/01/01 00:48:14 [I] [service.go:229] client login info: ip [192.168.88.9:34240] version [0.13.0] hostname [] os [linux] arch [amd64]1970/01/01 00:48:14 [I] [proxy.go:170] [f1de66317eeb0c11] [http_proxy] tcp proxy listen port [6800]1970/01/01 00:48:14 [I] [control.go:318] [f1de66317eeb0c11] new proxy [http_proxy] success1970/01/01 00:48:14 [I] [proxy.go:170] [f1de66317eeb0c11] [ssh] tcp proxy listen port [6000]1970/01/01 00:48:14 [I] [control.go:318] [f1de66317eeb0c11] new proxy [ssh] success# 这里为了测试我们连接到开发板,然后在开发板连接我们的PC[root@3352-T ~]# ssh root@10.0.0.78ssh: connect to host 10.0.0.78 port 22: Network is unreachable[root@3352-T ~]# ifconfig eth0eth0 Link encap:Ethernet HWaddr 04:A3:16:EE:D8:53inet addr:192.168.88.230 Bcast:192.168.88.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:474 errors:0 dropped:45 overruns:0 frame:0TX packets:256 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:62286 (60.8 KiB) TX bytes:43098 (42.0 KiB)#我们发现在88网段是无法连接10网段的任何主机,下面我们通过穿透工具进行连接[root@3352-T ~]# ssh -oPort=6000 root@192.168.88.230The authenticity of host '[192.168.88.230]:6000 ([192.168.88.230]:6000)' can't be established.ECDSA key fingerprint is 03:57:49:bb:9b:89:0e:57:31:fc:b5:ee:b4:4c:57:b7.Are you sure you want to continue connecting (yes/no)? yesFailed to add the host to the list of known hosts (/root/.ssh/known_hosts).root@192.168.88.230's password:Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-35-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/advantage80 个可升级软件包。1 个安全更新。Last login: Fri Oct 6 15:59:18 2017 from 10.0.0.78root@DZ:~# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:3b:a5:5f brd ff:ff:ff:ff:ff:ffinet 10.0.0.78/24 brd 10.0.0.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe3b:a55f/64 scope linkvalid_lft forever preferred_lft forever3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ba:da:aa:1c brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:baff:feda:aa1c/64 scope linkvalid_lft forever preferred_lft forever5: veth921922a@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether de:f8:30:93:03:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::dcf8:30ff:fe93:3b1/64 scope linkvalid_lft forever preferred_lft foreverroot@DZ:~## 通过上面我们可以看到我们成功从88网段连接到了我们的10网段,也就是说我们的内网穿透工具起作用了。



支付宝 微信