内网穿透技术是一种基于NAT下的一种技术。众所周知,当前IPV4资源是有限的,我们大部分的网络环境都是处于NAT下的内网环境。而不同内网间的访问,或者互联网对NAT下的内网资源的访问是一种常见的需求。由此产生了内网穿透技术。特别是在渗透测试中,内网穿透技术更是必备的一种技能。比如测试者从互联网中的web应用进行了突破,获得了web应用的权限。而该应用正处在一个内网中,测试者还需要进一步对其内网进行测试时,就需要运用到内网穿透进入到目标内网,进而进行内网漫游。除了渗透测以外,日常生活中也需要用到内网穿透技术。比如笔者当前在家里部署了NAS服务、keepass服务、还有渗透用的kali等多个服务或设备,同时在Azure上也有多台机器需要经常去连接。当我在公司时,需要远程访问这些设备或服务,就需要用到内网穿透技术。
针对于内网穿透,在渗透测试中,我们常用到的有DNS、ICMP、HTTP、SSH、SOCKE等内网穿透技术。常见的工具有MSF、CS、NPS、FRP、PING-TUNNEL、Neo-reGeorg、reGeorg、EW、ngrok。除了这些渗透测试常用的内网穿透以外,笔者还用过teamviewer、向日葵等软件自带的隧道功能,以及花生壳、蒲公英等DDNS工具。这些工具各有优缺点。比如NPS、FRP等工具,有点是速度快,但是用的人太多,特征太强,很多AV工具会判定其为黑客工具,很容易被ban掉。而teamviewer之类的工具要用到其隧道功能,就必须要安装,并且速度非常慢。针对端口转发类的内网穿透工具,如果是在渗透测试中临时打开还好,但要是工作环境中用到,无疑是将自己的rdp、ssh等重要敏感端口暴露在公网上,反而增加了安全风险。特别针对于笔者的办公需求,如下图所示,在不借助外部设备的情况下,如果能将多个内网连接起来,组成一个大内网,在各个内网间能够像在同一个内网中相互访问,那就很棒了。
好了,终于开始进入正题。基于上面的需求,今天我给大家介绍的工具就是TailScale。之所以推荐这款工具,我主要总结了以下几个优势:
1.部署简单。既可使用官方平台,也可以使用自建服务器;
2.跨平台。无论是Windows、Linux、还是MacOS,甚至IOS、Android,几乎全平台都能使用;
3.基于开源的WireGuard协议实现加密的点对点连接,延迟低且稳定;
4.不用把敏感端口暴露在互联网上,相对安全;
5.方便。可以将多个内网以不同节点的方式连起来。在多个内网间不用来回切换;
6.免费。只要设备不超过100台,都是免费的。对于个人而言,已经完全足够了。
以下是整个部署的过程。
1.在官网下载并安装客户端。根据自身设备的类型下载不同的客户端。
https://tailscale.com/download
Windows的下载安装比较简单,这里根据官方文档简单说一下Linux的安装方法。
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/nullcurl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.listsudo apt-get updatesudo apt-get install tailscalesudo tailscale up
2.当运行客户端以后,就会生成一个链接,然后在浏览器里访问链接。各个客户端使用同一个用户去登录。这样各个节点就能够自动添加到组网里了。最后如下图所示。这时候各个节点间就能互相访问了。
进阶用法
tailscale up --advertise-routes=10.0.0.0/24
// Define access control lists for users, groups, autogroups, tags,
// Tailscale IP addresses, and subnet ranges.
"groups": {
"group:dev": ["Your account"],
},
"acls": [
// Allow all connections.
// Comment this section out if you want to define specific restrictions.
{
"action": "accept",
"src": ["group:dev", "10.0.0.0/24", "192.168.1.0/24"],
"dst": ["10.0.0.0/24:*", "192.168.1.0/24:*"],
},
],
},
tailscale status ##查看当前的网络状态
tailscale netcheck ##检查网络情况
tailscale ping 192.168.1.1 ##查看连通性
git clone https://github.com/veritas501/ip_derper.git
docker build . -t ip_derper
docker run --rm -d -p 50443:443 -p 3478:3478/udp ip_derper
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update
sudo apt-get install tailscale
sudo tailscale up
git clone https://github.com/veritas501/ip_derper.git
docker build . -t ip_derper
sudo docker run --rm -d -p 50443:443 -p 3478:3478/udp -v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock ip_derper
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "my_private_derper",
"RegionName": "GG",
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "1.1.1.1",
"IPv4": "1.1.1.1",
"InsecureForTests": true,
"DERPPort": 50443,
},
],
},
"901": {
"RegionID": 901,
"RegionCode": "my_private_derper",
"RegionName": "MM",
"Nodes": [
{
"Name": "1",
"RegionID": 901,
"HostName": "1.1.1.1",
"IPv4": "1.1.1.1",
"InsecureForTests": true,
"DERPPort": 50443,
https://tailscale.com/kb/1118/custom-derp-servers/
go get tailscale.com/cmd/[email protected]
sudo derper --hostname=your-hostname.com