服务器如何做中转进行端口映射,使服务器之间通信,然后访问目标网站(baidu.com)

服务器如何做中转进行端口映射,使服务器之间通信,然后访问目标网站(baidu.com)

问题缘由

如果我们的某个服务器坏了,不能上网了,作为一个失败的man,不,应该是一个失败的服务器,感觉浑身难受。如果是自己购买的vps,感觉扔了挺可惜,但是又没法使用,心情挺糟糕。

解决方法就是:再使用一个海外的安全服务器,这个安全服务器就是成功人士,然后让这个成功人士做一个桥梁的作用,我们称之为中间服务器,我们坏掉的服务器称之为目的服务器。

我们访问成功人士,然后成功人士映射端口到失败的man,最后让失败的man处理事情,比如访问百度,然后把内容再返回。先返回给成功人士,成功人士再给我们。

我们访问中间服务器,然后中间服务器映射端口到目的服务器,最后让目的服务器处理事情,比如访问百度。

所需环境

两台vps都需要安装x-ui面板,也就只需要x-ui。

安装x-ui很简单,命令如下:

apt install -y curl socat

bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh) 

操作步骤

需要两台vps,自己可以试着玩一下。可以通过腾讯、阿里等购买,不过就是比较贵。可以网上找一些便宜的。

假设我们的中间服务器ip2是2.2.2.2,目的服务器ip1是1.1.1.1。

目前的问题是:首先确保我们可以访问ip2,但是不能访问ip1,也不能通过ip1访问百度。

我们的目的:通过ip1到ip2的端口映射,实现 本机——>ip2——>ip1——>baidu.com。

1. 目的服务器设置

目的服务器ip1就正常创建节点,假如我们已经创建好了,并且已经导入v2rayN里了。

此时可以看到我们的损坏服务器是1.1.1.1,我们创建的端口是100。因为服务器损坏,导致没有网络,并且也不能访问百度。

记住ip和端口号,之后要用到。

1.1.1.1 和 100

在这里插入图片描述

2. 中间服务器设置

也就是ip2的服务器设置。

打开x-ui面板,创建节点如下所示。

协议选择 dokodemo-door,端口就自己选择,这个就是之后要映射的端口,通过这个端口进行流量转发,转向ip1。

目标地址和端口号,就填写刚才上面的。设置完成之后点击添加即可。

记住中间服务器的ip,也就是2.2.2.2,还有端口2000。之后会用到。

在这里插入图片描述

此时中间服务器的设置也已经完成。

3. 修改客户端

修改客户端v2rayN的内容。

现在就需要去v2rayN里面修改内容了,双击刚才导入的节点。

修改地址和端口号,将其修改为中间服务器的内容。

地址从1.1.1.1改为2.2.2.2

端口号从100修改为2000
在这里插入图片描述

此时客户端也已经设置完成。可以查看真延迟和测试。

现在就可以通过客户端上网了。可以愉快的访问百度。此时查看ip,就可看到自己的ip是失败的man的ip,也即1.1.1.1。

在这里插入图片描述

总结

通过本文,我们可以拯救失败的man。

通过让一个成功人士搭桥,使其端口映射,照耀到失败的man,就可以层级累加上网(瞎编),失败的man访问百度,然后再返回数据。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在服务端、中转服务器和客户端之间传递密钥,通常采用公钥加密和私钥解密的方式进行。具体流程如下: 1. 首先,服务端和客户端各自生成一对公钥和私钥,中转服务器也可以生成自己的一对公钥和私钥。 2. 客户端使用服务端的公钥对密钥进行加密,并将加密后的密钥发送到中转服务器。 3. 中转服务器使用服务端的私钥对密钥进行解密,并将解密后的密钥发送给服务端。 4. 服务端使用密钥对数据进行加密或解密,并将加密或解密后的数据发送给客户端。 需要注意的是,公钥加密和私钥解密的方式只能保证密钥的安全传输,不能保证数据的安全性。如果需要确保数据的安全性,还需要使用对称加密算法对数据进行加密和解密。 下面是一个简单的示例代码,演示如何使用 RSA 算法进行密钥交换: 服务端代码: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import socket # 生成 RSA 密钥对 key = RSA.generate(2048) # 创建 socket 连接 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('localhost', 9999)) s.listen(1) print('Waiting for connection...') while True: # 等待客户端连接 conn, addr = s.accept() print(f'Connected from {addr}') # 向客户端发送公钥 public_key = key.publickey().export_key() conn.sendall(public_key) # 接收客户端加密后的密钥 encrypted_key = conn.recv(1024) # 使用私钥解密密钥 private_key = key.export_key() cipher_rsa = PKCS1_OAEP.new(RSA.import_key(private_key)) key = cipher_rsa.decrypt(encrypted_key) # 使用密钥加密数据并发送给客户端 cipher = AES.new(key, AES.MODE_EAX) data = b'Hello, world!' ciphertext, tag = cipher.encrypt_and_digest(data) conn.sendall(cipher.nonce + tag + ciphertext) # 关闭连接 conn.close() ``` 客户端代码: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import socket # 创建 socket 连接 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 9999)) # 接收服务端公钥 public_key = s.recv(1024) key = RSA.import_key(public_key) # 使用公钥加密密钥并发送给服务端 cipher_rsa = PKCS1_OAEP.new(key) key = b'this_is_a_secret_key' encrypted_key = cipher_rsa.encrypt(key) s.sendall(encrypted_key) # 接收服务端加密后的数据并解密 nonce = s.recv(16) tag = s.recv(16) ciphertext = s.recv(1024) cipher = AES.new(key, AES.MODE_EAX, nonce) data = cipher.decrypt_and_verify(ciphertext, tag) print(data.decode()) # 关闭连接 s.close() ``` 在这个示例代码中,服务端和客户端各自生成一对 RSA 密钥对,中转服务器可以按照相同的方式生成密钥对。客户端使用服务端公钥加密密钥,并将加密后的密钥发送给服务端。服务端使用自己的私钥解密密钥,并使用密钥对数据进行加密。客户端接收加密后的数据,使用密钥进行解密并输出。需要注意的是,这个示例只是为了演示密钥交换的基本流程,实际应用中需要更加严格地保护密钥和数据的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百年孤独百年

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值