飞羽

通过Wireguard和RouterOS将服务器的ip分配给本地
前几天想要把服务器中远程ip分配给家里的某台服务器使用,因此写了这个教程记录一下过程。
扫描右侧二维码阅读全文
30
2022/01

通过Wireguard和RouterOS将服务器的ip分配给本地

前几天想要把服务器中远程ip分配给家里的某台服务器使用,因此写了这个教程记录一下过程。


传统的frp、ngrok虽然可以达到内网穿透的效果,但是对于全端口映射是非常不方便的,因此想到使用Wireguard和RouterOS将服务器的ip分配给本地的方案。
参考这个大佬的链接:https://aoyouer.com/posts/wireguard-l3-forward/
主要分为以下几个过程:
1、开启net.ipv4.ip_forward
2、安装wireguard
3、配置wireguard服务端
4、更改ssh端口
5、routeros配置wireguard
6、添加路由规则
7、测试

1、开启net.ipv4.ip_forward

echo "net.ipv4.ip_forward=1">>/etc/sysctl.conf
sysctl -p

2、安装wireguard

apt install wireguard iptables -y
#安装wireguard
modprobe wireguard && lsmod | grep wireguard
#验证安装是否成功

2、配置wireguard服务端

  • 公钥私钥生产
cd /etc/wireguard
# 首先进入配置文件目录
wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey
#生成公钥和私钥
  • 服务端配置
echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 192.168.145.1/24
PostUp = iptables -t nat -A PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -A POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11;
#10.0.24.11替换为你自己的网卡地址 65533为ssh端口 65534为wireguard端口
PostDown = iptables -t nat -D PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -D POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11;
#10.0.24.11替换为你自己的网卡地址
# 服务端监听端口,可以自行修改
ListenPort = 65534
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 192.168.145.0/24,10.10.0.0/16"|sed '/^#/d;/^\s*$/d' > wg0.conf
  • 修改ssh端口
vim /etc/ssh/sshd_config
修改
Port 22
改为
Port 65533
systemctl restart sshd
  • 服务端启动
wg-quick up wg0

4、routeros配置wireguard

echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey)
# 客户端的内网IP地址
Address = 10.0.0.2/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf
  • 在routeros终端中输入以下内容
interface/wireguard/add name="wireguard1" mtu=1300 private-key="你的interface私钥"
/interface/wireguard/peers/add interface="wireguard1" public-key="你的peers公钥" endpoint-address="服务端ip" endpoint-port=端口 allowed-address="0.0.0.0/0" persistent-keepalive=5
/ip/address/add address="wireguard网卡网段" interface="wireguard1"
routing/table/add name="wgt" fib
/ip/route/add dst-address="0.0.0.0/0" gateway="wireguard1" routing-table="wgt"
/routing/rule/add src-address="本地目标主机" routing-mark=main action=lookup-only-in-table table=wgt
/ip/firewall/nat/add chain="srcnat" action=masquerade

如下图为正常ping值
正常ping
如下图为通过wireguard把ip分配给本地延迟
分配给本地延迟

可以看到延迟增加了一倍,因此最好大家使用离自己区域进的地方使用。
由于使用的是腾讯云8M轻量,因此测试带宽只有8M,算是把服务器网速跑满了。

文章名: 《通过Wireguard和RouterOS将服务器的ip分配给本地》

文章链接:https://blog.8086k.cn/archives/104/

联系方式:1412981048@qq.com

除特别注明外,文章均为飞羽小随笔原创,转载时请注明本文出处及文章链接
Last modification:January 30th, 2022 at 10:33 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment