前提需要支持链路聚合的交换机
这里以有web管理界面的2.5G交换机为例。
管理web界面 配置 链路聚合 将蜗牛星际两根网线链接的端口 按照图示组成LACP汇聚

登录蜗牛星际群晖管理界面


将板载两个千兆端口选择汇聚

设置全新的IP地址–注意 交换机没有做LACP链路汇聚的情况下 群晖设置后会断网。设置的IP不要和网卡1、网卡2 IP地址重复。

完成之后 生成bond1

进行个无聊的测速

前提需要支持链路聚合的交换机
这里以有web管理界面的2.5G交换机为例。
管理web界面 配置 链路聚合 将蜗牛星际两根网线链接的端口 按照图示组成LACP汇聚

登录蜗牛星际群晖管理界面


将板载两个千兆端口选择汇聚

设置全新的IP地址–注意 交换机没有做LACP链路汇聚的情况下 群晖设置后会断网。设置的IP不要和网卡1、网卡2 IP地址重复。

完成之后 生成bond1

进行个无聊的测速

蜗牛星际B款没有PCI-E ,无法主板扩展。
天猫优惠价格购入螃蟹USB无线网卡

交换机为 拼多多 70多的4电2.5G+2光万兆 交换机 具体购买方法 五一领券120-40凑单
群晖系统安装驱动

群晖docker 安装iperf3 服务器
version: ’3.8′
services:
iperf3-server:
image: networkstatic/iperf3
container_name: iperf3-server
ports:
- “5201:5201/tcp”
- “5201:5201/udp”
command: -s
restart: unless-stopped
实际测速截图
拷贝文件测速 实际速度不稳定 会降速,但是比千兆要强。

台式机买了X520双光口网卡
交换机为 公版8口2.5G+1光 、4口2.5G+2光
关于驱动 这篇文章写的很详细
https://malash.me/202207/intel-x520-drivers-on-windows-and-macos/
windows11下可以使用Windows10的驱动手动安装
https://www.intel.cn/content/www/cn/zh/download/18293/intel-network-adapter-driver-for-windows-10.html
教程转载自:https://bookfere.com/post/1145.html
根据教程将我的KPW5成功越狱+安装koreader
教程来自:https://blog.552211.eu.org/post/66

// Website you intended to retrieve for users.
//const upstream = 'www.google.com'
const upstream = 'yourid.free.fr'
// Custom pathname for the upstream website.
const upstream_path = '/'
// Website you intended to retrieve for users using mobile devices.
//const upstream_mobile = 'www.google.com'
const upstream_mobile = 'yourid.free.fr'
// Countries and regions where you wish to suspend your service.
const blocked_region = []
// IP addresses which you wish to block from using your service.
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
// Whether to use HTTPS protocol for upstream address.
const https = false
// Whether to disable cache.
const disable_cache = false
// Replace texts.
// const replace_dict = {
// '$upstream': '$custom_domain',
// '//google.com': ''
// }
const replace_dict = {
'$upstream': '$custom_domain',
}
let data={}
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
})
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');
let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;
if (https == true) {
url.protocol = 'https:';
} else {
url.protocol = 'http:';
}
if (await device_status(user_agent)) {
var upstream_domain = upstream;
} else {
var upstream_domain = upstream_mobile;
}
url.host = upstream_domain;
if (url.pathname == '/') {
url.pathname = upstream_path;
} else {
url.pathname = upstream_path + url.pathname;
}
if (blocked_region.includes(region)) {
response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
status: 403
});
} else if (blocked_ip_address.includes(ip_address)) {
response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
status: 403
});
} else {
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + upstream_domain);
if(method == 'POST'){
let origin_formData = await request.text()
data = {
method: method,
headers: new_request_headers,
body : origin_formData
}
console.log(data)
}else if(method == 'GET'){
data = {
method: method,
headers: new_request_headers
}
}
let fuckKeys = Object.fromEntries(new_request_headers)
console.log(method)
console.log(fuckKeys)
let original_response = await fetch(url.href, data)
connection_upgrade = new_request_headers.get("Upgrade");
if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") {
return original_response;
}
let original_response_clone = original_response.clone();
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;
if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}
new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');
if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}
const content_type = new_response_headers.get('content-type');
if (content_type != null && content_type.includes('text/html') && content_type.includes('UTF-8')) {
original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname);
} else {
original_text = original_response_clone.body
}
response = new Response(original_text, {
status,
headers: new_response_headers
})
}
return response;
}
async function replace_form_data(formData, upstream_domain, host_name) {
let text = await response.text()
var i, j;
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}
if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}
let re = new RegExp(i, 'g')
text = text.replace(re, j);
}
return text;
}
async function replace_response_text(response, upstream_domain, host_name) {
let text = await response.text()
var i, j;
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}
if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}
let re = new RegExp(i, 'g')
text = text.replace(re, j);
}
return text;
}
async function device_status(user_agent_info) {
var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
var flag = true;
for (var v = 0; v < agents.length; v++) {
if (user_agent_info.indexOf(agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
define( 'WP_DEBUG', false ); 下面增加
$domain = array("wow.auz.cc", "wowchina.free.fr", );
if(in_array($_SERVER['HTTP_HOST'], $domain))
{
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
}
define( 'WP_CONTENT_URL', '/wp-content');


一、登录Xrea 空间管理后台:https://cp.xrea.com/account/login/
二、域名A记录到K2空间IP,等待生效之后域名设置绑定。这里会强制A记录检查。

三、接着是站点设置:提供免费的SSL,几分钟-十几分钟生效。多个域名绑定一个站点目录。

四、需要修改wp-config.php
define( 'WP_DEBUG', false );
下面添加如下代码(除你在站点设置的主域名外都需要填写进去)
$domain = array("域名A", "域名B", "域名C");
if(in_array($_SERVER['HTTP_HOST'], $domain))
{
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
}
define( 'WP_CONTENT_URL', '/wp-content');

Tips:
编辑PHP配置文件最好用Visual Studio Code。避免格式出错导致wordpress跳500错误。
若出现500错误进不了wp-admin。解决办法:把wp-config.php备份后将网站目录下原文件删掉,重新运行wordpress安装程序,填写原数据库账户密码表前缀会自动生成一份。期间会提示你已经安装wordpress,数据不会丢失。