n2n内网穿透及代理服务

  • 实现内网穿透
  • 将内网服务的HTTP/HTTPS、任意服务暴露代理

安装配置

服务端

n2n项目:https://github.com/ntop/n2n

下载源码包,编译安装

./autogen.sh
./configure
make
make install

# 安装完执行命令,检查安装是否正确
supernode -h
edge -h

n2n组成为supernode + edge,各edge通过supernode建立起连接,而后通过supernode转发相互间请求或形成edge之间的相互连接,具体视各edge网络结构而定

启动supernode

nohup supernode -l 33456 &>/dev/null &

注意:防火墙需要开放supernode监听的端口(udp 33456)

在supernode服务器上启动一个edge端

edge -a 10.2.0.11 -c edge0 -k mypassword -l 18.x.x.123:33456

Windows客户端

下载Windows客户端:https://github.com/lucktu/n2n

解压目录中edge.exe即为Windows客户端。在Windows系统中,如果没有TAP网卡,需要先安装有TAP网卡,而后才能使用edge。

安装TAP网卡步骤:

  1. windows+r输入hdwwiz.exe
  2. 安装手动从列表选择的硬件
  3. 选择网络适配器
  4. 选择TAP-Win32 Provider V9安装

Windows端启动

edge.exe -a 10.2.0.10 -c edge0 -k mypassword -l 18.x.x.123:33456

确认两端能够访问

首先确保edge端均已正常启动,无错误等。

查看网卡、IP,确认配置的虚拟IP已添加;如Windows端,10.2.0.10应当已自动设置到TAP网卡。

查看客户端日志,Linux端在系统日志中查看,Windows端默认为stdout输出;有类似如下REGISTER信息,表明edge正确的注册到了supernode,只有两端均已注册,才能够相互访问。

[PsP] Rx REGISTER src=00:FF:A8:BD:FB:75 dst=C6:F7:48:6D:CC:6B from sn=18.x.x.123:33456 (edge:183.x.x.252:37136)

通过基本检查ping等形式,确保两端可基本访问。而后则可通过虚拟IP自由访问对方任意端口、服务

服务暴露

需求描述:A(当前场景为supernode)为公网服务器,B(当前场景为Windows客户端)为局域网服务器,用户在任何地方访问A服务器WEB站点,A服务器通过n2n网络穿透将其访问代理到B服务器

  • A、B均已安装edge,并实现互通

以代理方式实现

实现步骤

  • A、B服务器已实现n2n互通
  • A服务器通过虚拟IP访问B服务器站点正常
  • A服务器安装Nginx
  • A服务器配置Nginx代理
  • 任意环境访问A服务器代理的站点
# 访问B服务器,确保其WEB服务正常
curl -I -o /dev/null -s -w %{http_code} 10.2.0.10

# nginx代理配置
server {
    listen 80 ssl http2;
    listen [::]:80 http2;

    server_name n2n.example.com;
    index index.html index.htm;

	location / {
        proxy_redirect off;
        proxy_read_timeout 1200s;
        proxy_pass http://10.2.0.10;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }
}

# 配置完成后重载nginx配置

现在任意环境中访问A服务器80端口,访问域名为n2n.example.com,实际访问会被通过n2n两个端点的虚拟IP转发实现穿透效果。

以端口转发方式实现

访问公网服务器的30444端口,将其请求转发到n2n虚拟IP为10.2.0.10的服务器上

# 开启端口转发
echo 1 >/proc/sys/net/ipv4/ip_forward

# 目标地址转换
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 30444 -j DNAT --to-destination 10.2.0.10:80

# 源地址转换
iptables -t nat -A POSTROUTING -d 10.2.0.10 -p tcp --dport 80 -j SNAT --to-source 10.2.0.11
  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

ioops

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值