内网穿透是一种网络技术,它允许从公共网络访问位于私有网络或本地网络中的设备或服务。举个例子,假如您在家里搭建了一个Web服务器,并想让外部用户通过互联网访问该服务器,但您的家庭网络使用了网络地址转换(NAT)来共享公共IP地址,别人是无法访问的,这时您可以使用内网穿透技术将互联网上的请求转发到您的Web服务器上。就是这么个意思。

很多人容易和内网渗透搞混淆,内网穿透(Internal Network Penetration)和内网渗透(Internal Network Penetration Testing)其实并不是一个意思。

所谓的内网渗透是指攻击者尝试获取并扩展其在一个局域网或内部网络中的权限和访问权限。说明白点就是你尝试利用弱密码、未修补的漏洞、不安全的配置、恶意软件等方式去渗透他人的网络,并获取管理员权限、访问敏感文件、窃取机密数据、操纵系统或网络设备等。

很多人有疑问,内网穿透违法吗?

这个很难说,你说不违法吧,好像有道理。说违法吧,又好像有那么几个意思。连以前用的花生壳都有什么配合国家安全的提示语。

既然说不通,那就交给ai,看看ai是怎么说的:

内网穿透技术本身并不违法。它是一种网络技术,用于建立公网和私网之间的连接通道,以实现对私有网络中设备或服务的访问。

然而,在使用内网穿透技术时,您需要遵守当地的法律法规,并且仅在合法和授权的情况下使用该技术。例如,如果您使用内网穿透技术访问他人的私有网络或设备,而未经其授权或违反其隐私权,这将是非法的,并可能导致法律责任。

此外,内网穿透技术也可能存在安全风险。未经妥善保护的设备或服务可能会受到未经授权的访问或攻击。因此,在使用内网穿透技术时,务必采取适当的安全措施,包括强密码、身份验证、防火墙配置等,以确保网络的安全性。

总而言之,内网穿透技术本身并不违法,但在使用时需要合法性和安全性,并遵守当地的法律法规。如果您有任何疑问或担忧,建议咨询相关的法律专业人士或网络安全专家。

好了,废话有点太多,开始了

今天要用到的内网穿透工具叫做lanproxy

项目地址:https://github.com/ffay/lanproxy

项目地址:https://github.com/frank-lam/lanproxy-nat

项目地址:https://github.com/frank-lam/lanproxy-client

docker服务端地址:https://hub.docker.com/r/franklin5/lanproxy-server

docker客户端地址:https://hub.docker.com/r/franklin5/lanproxy-client

使用流程:

1.先在一台公网服务器搭建服务端(lanproxy-server)

2.再本地电脑上搭建客户端(lanproxy-client)

3.最后在服务端配置参数,比如客户端管理 配置管理 域名nginx端口转发这个都需要在服务端完成

4.本地客户端只需要安装好后,启动连接成功即可

步骤如下:

一. 使用docker安装lanproxy服务端(lanproxy-server)

1.安装nginx服务

输入以下命令:


sudo apt update   #更新软件包列表

sudo apt install nginx  #安装Nginx

sudo systemctl start nginx  #启动Nginx服务

sudo systemctl status nginx   #验证Nginx是否正常运行

2.创建目录,并赋予权限


sudo -i

mkdir -p /root/data/docker_data/lanproxy

chmod -R 777 /root/data/docker_data/lanproxy

cd /root/data/docker_data/lanproxy

3.创建docker-compose.yml


vim docker-compose.yml

4.复制粘贴一下命令


version: '3.1'
services:
  lanproxy-client:
    image: franklin5/lanproxy-server
    container_name: lanproxy-server
    environment:
     # 配置你的账号
     - LANPROXY_USERNAME=test
     # 配置你的密码
     - LANPROXY_PASSWORD=test
    ports:
     - 8090:8090
     - 4900:4900
     - 4993:4993
     - 9000-9100:9000-9100
    restart: always

5.拉起镜像


docker-compose up -d

6.输入http://公网ip:8090,即可看到登录界面。服务端登录账号密码都是test,若是需要修改端口号,重新编辑文件即可。

好啦,到这里lanproxy的基础环境已经搭建成功。

二. 用java安装lanproxy客户端

1.安装java

第一种方法:


java -version   #先验证是否安装

apt-get update  #更新包索引

apt-get install default-jre -y  #安装

第二种方法:

a.在浏览器输入下载地址,查看适合自己系统的安装包

https://www.oracle.com/java/technologies/downloads/

b.下载适合自己的安装包,ubuntu18.04

wget -O jdk.tar.gz https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

c.解压文件,记住这时候解压出的文件夹路径


tar -zxvf jdk.tar.gz   #在root目录下解压

ls /root/        #java路径目前为/root/jdk-21.0.2

d.编辑/etc/profile 文件


cd /etc/

vim /etc/profile

e.添加如下代码:


JAVA_HOME=/root/jdk-21.0.2

export PATH=$JAVA_HOME/bin:$PATH


f.使配置生效


source /etc/profile

java -version  #查看 JAVA 版本

2.下载Java版lanproxy客户端开箱即用

a.新建一个文件夹,名字随便。比如我在root目录下新建了一个1文件夹


sudo -i

mkdir -p /root/1

chmod -R 777  /root/1

cd /root/1

b.输入一下代码:


git clone https://github.com/frank-lam/lanproxy-client.git  #从仓库克隆代码

c.下载好文件之后修改

文件会出现distribution/proxy-client-0.1目录下

打开之后有几个文件夹:bin、conf、lib和log,配置信息在conf/config.properties文件内,配置信息需要修改一下

我们修改两个地方就可以了

修改client.key为你服务端添加的key(下面会说到,等下再返回修改也可以)

修改server.host为你服务器的公网ip,其它默认即可

d.启动本地客户端


cd /root/1/distribution/proxy-client-0.1/bin   #定位到启动文件下


./startup.sh   #该命令是启动

./stop.sh    #该命令是停止

三. 登录服务端,添加客户端参数 配置管理参数

1.点击客户端管理-添加客户端,名称随便填写,生成随机秘钥

2.点击配置管理-添加配置,代理名称随便填写,公网端口不能和其它端口冲突

3.内网主机ip,这里单独说明一下,因为我是用java安装的客户端,所以格式是127.0.0.1:1234

若是docker安装的客户端,格式是172.17.0.1:1234,因为docker是一个单独的网络接口

四. 连接测试成功

1.打开浏览器,输入http://公网ip:8090打开登录界面,输入密码test,打开服务端的后台

2.在服务端后台可查看状态在线或者是否离线

3.查看流量统计,有流量数据一般是没什么太大问题了

五.绑定域名

1.把你的域名A记录到公网ip

2.进入nginx配置目录


cd /etc/nginx/conf.d

3.创建xxx.com.conf 配置文件


vim xxx.com.conf  #这里填你的域名

4.添加如下代码:


server {
    listen 80;
    # 这里使用自己的域名
    server_name xxx.com;
    charset utf-8;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        # 这里根据你的 lanproxy 配置,改成 config.server.port的值
        proxy_pass       http://127.0.0.1:9002;
        client_max_body_size 35m;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

把server_name后面修改成你的域名,proxy_pass后面的端口修改成你在服务端填写的公网端口

5.重启nginx,最好还是重启机器



systemctl restart nginx  #重启nginx

nginx -s reload   #重启nginx

sudo reboot  #重启机器

6.不出意外,通过xxx.com就能访问你本地服务了。

结束语录:

最后,本文只做学习和交流探讨,请勿用于非法用途。使用内网穿透时也需要合法性和安全性,并遵守当地的法律法规。

补充:

docker安装lanproxy客户端

1.安装 Nginx 服务,此处忽略。

2.创建目录,并赋予权限


sudo -i

mkdir -p /root/data/docker_data/lanproxy


chmod -R 777 /root/data/docker_data/lanproxy

cd /root/data/docker_data/lanproxy

3.创建编辑docker compose文件


vim docker-compose.yml

4.添加如下代码,记得修改key和host:


version: '3.1'
services:
  lanproxy-client:
    image: franklin5/lanproxy-client
    container_name: lanproxy-client
    environment:
     # 这里是在lanproxy后台配置的密钥
     - LANPROXY_KEY=你的key
     # 服务器的ip,支持域名
     - LANPROXY_HOST=你的公网ip
    restart: always

5.拉起镜像


docker-compose up -d

6.在浏览器输入http://公网ip:8090,查看客户端是否上线

7.注意事项:

使用docker直接运行容和在宿主机上运行时有所不同

在docker服务启动后,docker会为宿主机和容器各自分配一个docker网卡,而宿主机上会分配默认的IP地址,即:172.17.0.1

故容器中可以ping通宿主机上172.17.0.1的任何TCP端口。

所以我们在后面的后台网页上的端口配置,不再是127.0.0.1,必须是172.17.0.1:port

8.docker容器查看ip地址,查看端口占用


ifconfig  #第一种方法

ip a | grep docker      #第二种方法

ip addr show docker0    #查看网络接口docker0的局域网

sudo lsof -i :80   #查看端口占用


致此,教程结束,请务必遵守当地的法律法规!!!