怎么配置IPv6的ddns我这里就不多说了,能看这篇文章肯定是因为已经配置好了,但是在实际中遇到了一些问题,这里只先提配置中我遇到的一个问题:一定要去光猫的设置(通常浏览器访问192.168.1.1)里面关闭这个Ipv6Spi防火墙,不然你只能在你的内网里面访问你的IPv6地址(还不如我们的192.168.*.*)
好了,接下来是我要讲的内容,把ddns配置好了以后,你可能会发现:phpstudy搭建的网站不能公网访问,这个可以去修改配置文件,把Apache或者Nginx里面的端口监听改一下,配置文件的地址分别为phpstudy_pro\Extensions\Apache2.4.39\conf\vhosts\ 和 phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts,用的哪个就修改哪个的,也可以都修改,
listen 80;
修改为以下类型的就可以了
listen [::]:80;
但是像这样直接修改了会导致IPv4又无法访问了,可以直接加一行,不修改原来的,
listen 80;
listen [::]:80;
但是有些程序不能手动修改配置文件怎么办?
例如这个(具体是什么我就不说了),不能手动修改监听端口,当我尝试直接把端口改为这个时
提示只能输入数字
那怎么办,没事,还好我有练习时长。。。反正很长的技术,第一时间想到的是端口转发,网上搜索之后发现普遍使用的是Windows自带的netsh里面的一个模块,但是那个会造成端口占用(也可能是我的问题),导致我想要的程序无法监听,在几次尝试和失败后,我沉默了...诶!😇☝️还可以使用代理服务器,然后抄起屎山代码的技术,写了这个代理程序(不要问为什么里面打印信息都是英文,因为我喜欢)
import socket
import threading
def handle_client(client_socket, target_host, target_port):
target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_socket.connect((target_host, target_port))
try:
# 使用线程来转发数据,防止连接断开后代理关闭
threading.Thread(target=transfer_data, args=(client_socket, target_socket)).start()
threading.Thread(target=transfer_data, args=(target_socket, client_socket)).start()
except Exception as e:
print(f"An error occurred: {e}")
client_socket.close()
target_socket.close()
def transfer_data(src, dest):
while True:
data = src.recv(4096)
if not data:
break
dest.sendall(data)
def start_server(ipv6_host, ipv6_port, ipv4_host, ipv4_port):
server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((ipv6_host, ipv6_port))
server_socket.listen(5)
print(f"Server is listening on [{ipv6_host}]:{ipv6_port}")
try:
while True:
client_socket, client_addr = server_socket.accept()
print(f"Accepted connection from {client_addr}")
# 创建线程来处理客户端连接
threading.Thread(target=handle_client, args=(client_socket, ipv4_host, ipv4_port)).start()
except KeyboardInterrupt:
print("Server is shutting down.")
finally:
server_socket.close()
if __name__ == "__main__":
ipv6_host = '::' # 监听所有 IPv6 地址,通常无需修改
ipv6_port = 5215 #需要转发的 IPv6 端口,按需修改
ipv4_host = '127.0.0.1' # 本地 IPv4 地址,通常无需修改
ipv4_port = 7777 #转发到的 IPv4 端口,按需修改
start_server(ipv6_host, ipv6_port, ipv4_host, ipv4_port)
将最后这几行的转发信息按需修改一下,运行,就可以开始转发了,挂在一边就可以不用管了,但是注意,他会主动开放并占用一个IPv6端口也就是44行配置的,在客户端需要修改为一样的,但是不会占用IPv4端口,然后你的服务端监听端口就是46行的ipv4_port,
例如在phpstudy上搭建了一个网站,未做任何配置修改的情况下,本地地址为192.168.1.100:7777,然后修改我这份python代码,把44行的端口随便修改一个(自己喜欢就好),我就默认的这里5215,然后你看看你ddns域名,如example.me,那么添加IPv6端口在后面像这样example.me:5215,就可以公网访问了