起因

这学期参加了几次线下赛,0CTF Final、铁三等,其中涉及到内网与外网的同时连接以及如何让场外的人也能访问到内网的服务的问题,其他比赛也有人问过我这个问题,我在配置的时候也请教了一些有经验的师傅,看了一些博客,现在也想把这个记录下来,防止忘记。

几种不同的环境情况

1.比赛本身就提供同时的外网和内网支持(电脑直接可以同时连接)

2.比赛本身只需要内网,但是 也不屏蔽外网信号, 可以使用比赛场地的wifi或者是使用自己的手机热点

3.比赛强制使用内网,连手机都不给,甚至屏蔽信号

第一种情况就是比较舒服的配置也相对简单,第二种就是配置稍微有些复杂,最后一种,我后面再解释。

步骤

一、第一种情况:

1.需要的东西:
(1) 自己的电脑
(2) 自己的有外网ip的vps
(3)GitHub 的开源项目 frp
https://github.com/fatedier/frp

这种情况就非常简单只要配置好 frp 这个工具就ok了

配置的方法:

1.在vps上下载frp 对应的版本
比如我是Linux的vps:

frp_0.20.0_linux_386.tar.gz

2.配置服务端与客户端的链接端口
frps.ini

[common]
bind_port = 7000

注意:这个配置文件其实有两个,这是简易配置,还有一个比较复杂的,如果有需要可以看readme

3.打开你服务器上准备映射的端口(以centos为例)

(1)关闭防火墙:

chkconfig iptables off

(2)查看目前打开的端口:

/etc/init.d/iptables status

(3)打开某个(某个范围之间的)端口

iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 

iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT  

(4)保存并重启防火墙

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

4.vps上运行frps
首先cd 到对应的目录
然后

./frps -c ./frps.ini

3.在能访问内部服务器的主机上下载对应的frp
比如我是windows:

frp_0.20.0_windows_386.zip

4.配置好我们客户端的配置文件

frpc.ini

[common]
server_addr = xxx.xxx.xxx.xxx//远程服务器的端口
server_port = 7000//远程服务器与主机的连接端口

[这里填写的是这个配置的标识,区别其他配置]
type = tcp
local_ip = 192.168.201.12//内网的地址
local_port = 51321//内网的端口
remote_port = 6000//映射到远程服务器的端口(就是之前服务器上)

5.在主机上运行frpc

./frpc -c ./frpc.ini

好了,现在外网就能通过你的vps访问你的内网的对应机器了,但是你只要内网有一个ip和端口就需要写一个配置

二、第二种情况:

这个时候我们就需要通过配置将第二种情况转化成第一种情况,通过配置路由实现外网内网的同时访问。

我本地是windows 那我就以windows举例
windows 添加路由的方式是使用 route add 指令

1.首先我们查看一下本地的路由:

route print 

2.添加两条路由
命令的规则

route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 (METRIC 3 IF 2)

意思是:
请求 157.0.0.0 网段的请求都由 157.55.80.1 来鲈鱼

route add -p 0.0.0.0 mask 0.0.0.0 外网网关ip
route add -p 内网网段 mask 内网掩码 内网网关

现在就能两个网同时访问了

3.请回到第一种情况配置 frp

三、第三种情况:

大兄弟,醒醒吧,你自己都联不上外网,还想让别人找到你?好好做题吧。。。。

参考链接

https://github.com/fatedier/frp
https://www.cnblogs.com/fetty/p/4524029.html
https://blog.csdn.net/u011846257/article/details/54707864