@cyysu
2017-10-06T08:16:44.000000Z
字数 11867
阅读 1855
- 时间: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-gnueabi
gcc-5-arm-linux-gnueabi-base gcc-5-cross-base gyp libasan2-armel-cross
libatomic1-armel-cross libc6-armel-cross libc6-armhf-armel-cross
libc6-armhf-cross libc6-dev-armel-cross libc6-dev-armhf-armel-cross
libc6-dev-armhf-cross libgcc-5-dev-armel-cross libgcc1-armel-cross
libgomp1-armel-cross libhfasan2-armel-cross libhfatomic1-armel-cross
libhfgcc-5-dev-armel-cross libhfgcc1-armel-cross libhfgomp1-armel-cross
libhfstdc++6-armel-cross libhfubsan0-armel-cross libjs-inherits
libjs-node-uuid libjs-underscore libstdc++6-armel-cross
libubsan0-armel-cross libuv1 libuv1-dev libxfce4util-bin libxfce4util-common
libxfce4util7 libxfconf-0-2 linux-headers-4.10.0-32
linux-headers-4.10.0-32-generic linux-headers-4.8.0-36
linux-headers-4.8.0-36-generic linux-image-4.10.0-32-generic
linux-image-4.8.0-36-generic linux-image-extra-4.10.0-32-generic
linux-image-extra-4.8.0-36-generic linux-libc-dev-armel-cross
linux-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.gz
mj@DZ:/usr/local$ sudo cp go/bin/go /usr/bin/
# 设置go环境变量
mj@DZ:/usr/local$ vim ~/.bashrc
# 写入下面的内容
export GOROOT=/usr/local/go
export GOBIN=/usr/local/go/bin
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOBIN
# 使环境变量生效
mj@DZ:/usr/local$ source ~/.bashrc
# 查看go版本
mj@DZ:/usr/local$ go version
go version go1.9 linux/amd64
# 下载frp
mj@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/frp
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ ls
assets client conf Dockerfile frpc_linux_arm Godeps Makefile models README.md server utils web
bin cmd doc Dockerfile_alpine frps_linux_arm LICENSE Makefile.bak package.sh README_zh.md tests vendor
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$
# 修改交叉编译的makefile
# 这里编译默认是编译本地架构类型的执行文件
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ make
go fmt ./assets/...
go fmt ./client/...
go fmt ./cmd/...
go fmt ./models/...
go fmt ./server/...
go fmt ./utils/...
go build -o bin/frps ./cmd/frps
go build -o bin/frpc ./cmd/frpc
# 如果编译其他类型 那么执行一下操作
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ mv Makefile Makefile.bak
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ mv Makefile.cross-compiles Makefile
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ cat Makefile
export PATH := $(GOPATH)/bin:$(PATH)
export GO15VENDOREXPERIMENT := 1
LDFLAGS := -s -w
all: build
build: app
app:
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_darwin_amd64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_darwin_amd64 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_386 ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_386 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_arm ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frps_linux_arm ./cmd/frps
env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_386.exe ./cmd/frpc
env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_386.exe ./cmd/frps
env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_amd64.exe ./cmd/frpc
env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_amd64.exe ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64le ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64le ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mipsle ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mipsle ./cmd/frps
PC:
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frps
ARM:
env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_arm ./cmd/frpc
env 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 PC
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_linux_amd64 ./cmd/frpc
env 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 ARM
env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o ./frpc_linux_arm ./cmd/frpc
env 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$ ls
assets client conf Dockerfile frpc_linux_amd64 frps_linux_amd64 Godeps Makefile models README.md server utils web
bin 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_arm
frpc_linux_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frpc_linux_amd64
frpc_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frps_linux_amd64
frps_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
mj@DZ:/usr/local/gopath/src/github.com/fatedier/frp$ file frps_linux_arm
frps_linux_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
mj@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$ ls
frpc frpc.ini frps static
mj@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.230
server_port = 7000
[ssh]
type = tcp
local_ip = 10.0.0.78
local_port = 22
remote_port = 6000 #访问服务器的6000端口就是访问内网的22端口
[root@3352-T chen]# ls
frps_linux_arm* frpc_linux_arm* frps.ini
[root@3352-T chen]# cat frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_user = admin
dashboard_pwd = admin
dashboard_port = 7500
auth_token = 123
[ssh]
bind_addr = 0.0.0.0
listen_port = 6000
[root@3352-T chen]# ./frps_linux_arm -c ./frps.ini
1970/01/01 00:46:43 [I] [service.go:83] frps tcp listen on 0.0.0.0:7000
1970/01/01 00:46:43 [I] [service.go:108] http service listen on 0.0.0.0:80
1970/01/01 00:46:43 [I] [service.go:124] https service listen on 0.0.0.0:443
1970/01/01 00:46:43 [I] [service.go:134] Dashboard listen on 0.0.0.0:7500
1970/01/01 00:46:43 [I] [main.go:112] Start frps success
1970/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.ini
2017/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 success
2017/10/06 15:38:46 [I] [control.go:411] [f1de66317eeb0c11] [ssh] start proxy success
# 这个时候ARM服务器端出现的内容如下
[root@3352-T chen]# ./frps_linux_arm -c ./frps.ini
1970/01/01 00:48:12 [I] [service.go:83] frps tcp listen on 0.0.0.0:7000
1970/01/01 00:48:12 [I] [service.go:108] http service listen on 0.0.0.0:80
1970/01/01 00:48:12 [I] [service.go:124] https service listen on 0.0.0.0:443
1970/01/01 00:48:12 [I] [service.go:134] Dashboard listen on 0.0.0.0:7500
1970/01/01 00:48:12 [I] [main.go:112] Start frps success
1970/01/01 00:48:12 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
1970/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] success
1970/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.78
ssh: connect to host 10.0.0.78 port 22: Network is unreachable
[root@3352-T ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 04:A3:16:EE:D8:53
inet addr:192.168.88.230 Bcast:192.168.88.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:474 errors:0 dropped:45 overruns:0 frame:0
TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:62286 (60.8 KiB) TX bytes:43098 (42.0 KiB)
#我们发现在88网段是无法连接10网段的任何主机,下面我们通过穿透工具进行连接
[root@3352-T ~]# ssh -oPort=6000 root@192.168.88.230
The 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)? yes
Failed 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/advantage
80 个可升级软件包。
1 个安全更新。
Last login: Fri Oct 6 15:59:18 2017 from 10.0.0.78
root@DZ:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:3b:a5:5f brd ff:ff:ff:ff:ff:ff
inet 10.0.0.78/24 brd 10.0.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe3b:a55f/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ba:da:aa:1c brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:baff:feda:aa1c/64 scope link
valid_lft forever preferred_lft forever
5: veth921922a@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether de:f8:30:93:03:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::dcf8:30ff:fe93:3b1/64 scope link
valid_lft forever preferred_lft forever
root@DZ:~#
# 通过上面我们可以看到我们成功从88网段连接到了我们的10网段,也就是说我们的内网穿透工具起作用了。
支付宝 微信