使用 B VPS 中转 A VPS 流量

引言 由于某些不可抗力原因, 所处网络环境无法访问 A VPS, 因此 增加 能访问到的 B VPS 来中转流量到 A VPS me –x-> A VPS me <—-> B VPS <—-> A VPS 非内网穿透需求, A VPS 有公网ip, 可被公网直接发现 和使用某些客户端 配合 Cloudflare Proxy 类似 me(X Client) <—-> Cloudflare <—-> A VPS <—-> google.com me(X Client) <—-> 中转机 <—-> 落地机 <—-> google.com PS: 目前已知 Cloudflare 支持代理: HTTP/HTTPS, WebSocket 和 gRPC(HTTP/2) 但支持的端口有限, 详情请看 Cloudflare 文档 Nginx 流量转发 Nginx是非常强大的四层、七层反向代理软件,功能强大,在互联网上广泛应用。 本节介绍Nginx转发配置。

1. 配置 B VPS /etc/nginx/nginx.conf /etc/nginx/nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

# start: 转发
stream {
    server {
        listen B-VPS-端口号;  # 1-65535 的任意一个数字,无需与 A VPS 的端口号相同
        proxy_pass A-VPS-ip:A-VPS-端口号; # 用 A VPS ip 和端口号替换
    }
}
# end: 转发

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    ....
}
nginx -s reload
# 记得 B VPS 放行此端口 (B-VPS-端口号)
firewall-cmd --zone=public --add-port=8024/tcp --permanent
firewall-cmd --reload

也可以下方这么写 /etc/nginx/nginx.conf

# start: 转发
stream {
    upstream bi_remote_desk {
        # 转发 ip 和端口
        # 用 A VPS ip 和端口号替换
        server 10.10.10.10:3389;
    }
    server {
        # 监听端口
        # 1-65535 的任意一个数字,无需与 A VPS 的端口号相同
        listen 3389; 
        # 转发请求
        proxy_pass bi_remote_desk;  
    }
}
# end: 转发

可以同时配置多个 /etc/nginx/nginx.conf

# start: 转发
stream {
    upstream bi_remote_desk {
        # simple round-robin 转发IP和端口
        server 10.10.10.10:3389;
        #check interval=3000 rise=2 fall=5 timeout=1000;
        #check interval=3000 rise=2 fall=5timeout=1000
        #check interval=3000 rise=2 fall=5timeout=1000
        #check_http_send "GET /HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xxhttp_3xx;
    }
    server {
        listen 3389; ##监听端口
        proxy_pass bi_remote_desk;  #转发请求
    }
    upstream 214_ssh {
        server 10.10.10.10:22;
    }
    server {
        listen 105; ##监听端口
        proxy_pass 214_ssh;  #转发请求
    }
}
# end: 转发

2. 配置 A VPS

仅允许 B VPS ip 连接该服务器(A)的 32 端口, 当然也可以不做这步

firewall-cmd --permanent --add-source=B-VPS-ip/32
fireawll-cmd --reload

firewalld 流量转发 firewalld 是 CentOS7/8 默认的防火墙前端软件,绝大多数主机商提供的镜像都已经安装。 firewalld 转发的好处是 效率高, 直接在内核执行。 TODO: firewalld 流量转发 Q&A

Q: NAT 是什么 ?

使用 B VPS 中转 A VPS 流量

网络地址转换(英语:Network Address Translation,缩写:NAT;又称网络掩蔽、IP掩蔽)在计算机网络中是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问互联网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。 1990年代中期,NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。网络地址转换在很多国家广泛使用。所以NAT就成了家庭和小型办公室网络连接上的路由器的一个标准特征,因为对他们来说,申请独立的IP地址的代价要高于所带来的效益。 在一个典型的配置中,一个本地网络使用一个专有网络的指定子网(比如192.168.x.x或10.x.x.x)和连在这个网络上的一个路由器。这个路由器占有这个网络地址空间的一个专有地址(比如192.168.0.1),同时它还通过一个或多个因特网服务提供商提供的公有的IP地址(叫做“过载”NAT)连接到因特网上。当信息由本地网络向因特网传递时,源地址从专有地址转换为公用地址。由路由器跟踪每个连接上的基本数据,主要是目的地址和端口。当有回复返回路由器时,它通过输出阶段记录的连接跟踪数据来决定该转发给内部网的哪个主机;如果有多个公用地址可用,当数据包返回时,TCP或UDP客户机的端口号可以用来分解数据包。对于因特网上的通信,路由器本身充当源和目的。 流行在网络上的一种看法认为,IPv6的广泛采用将使得NAT不再需要,因为NAT只是一个处理IPv4的地址空间不足的方法。

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/12226

(0)
凯影的头像凯影
上一篇 2024年6月28日 下午2:32
下一篇 2024年7月2日 下午4:23

相关推荐

  • 迁移到新服务器上的PHP网站,使用浏览器访问时提示“不支持MySQL”等信息,如何处理?

    问题描述 PHP网站(该网站需使用PHP执行程序代码)迁移到新服务器后,在使用浏览器访问时提示如下任意一种信息。 问题原因 因为MySQL扩展功能自PHP 5.5.0版本开始被废弃,并且从PHP 7.0.0版本开始被移除,当网站迁移到新服务器时一般会迁移到PHP 7.0.0及以上版本,由于网站迁移后的新服务器的PHP版本过高,网站程序无法再连接MySQL,导…

    2023年11月17日
    1.5K00
  • Centos7安装postgresql数据库

    1.更新源 2.安装postgresql 3.初始化数据库 4.启动数据库并设置开机启动 5.登录postgresql并设置密码 postgresql在安装时默认添加用户postgres 输入 psql 进入数据库是这样的 设置密码: 退出按:q 备注其他:列出所有库l 列出所有用户du 列出库下所有表d 6.重启数据库: 7 创建数据库跟用户 因为post…

    2023年4月11日
    1.6K00
  • docker搭建ELK日志平台

    ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。 由于Logstash占用的资源比较大,我们选择filebeat这个轻量级的日志收集工具来代替Logstash 一、安装ELK 首先,我们通过docker-compose来安装单机版elasticsearch和kibana。 创建docker…

    2023年1月13日
    1.9K00
  • CentOS7系统下扩容根目录

    利用单一磁盘的剩余空间 在同一块磁盘下,有剩余空间未分配,将该空间合并到根目录中 本文以/dev/sda为例 查看磁盘分区情况 lsblk或者fdisk -l /dev/sda 可以看到 sda 总容量为30G,而 sda1和 sda2 加起来总共使用了10G,因此我们可以将剩余的容量添加到目录中 对剩余空间进行分区格式化操作 fdisk /dev/sda …

    2022年6月9日
    2.1K00
  • Linux安装青龙面板 稳定版超级详细

    一.安装docker容器 1.工具安装 复制所有代码然后直接右键粘贴进去 中间过程输入y 回车 yum install docker-io –y 这里输入y 安装成功之后是这个样子 输入以下代码回车 systemctl start docker 复制粘贴下面命令回车 docker ps 如果显示下图 即为成功 二.安装青龙面板 1.安装面板 (想改青龙面板端…

    2022年6月22日
    3.8K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信