开了warp之后不能SSH登录
问题:
Abhi, [2023/1/17 11:08]
Hello, how can I use wg-quick up in my gcp server and then ssh back to it???
Abhi, [2023/1/17 11:08]
I want to add warp ip in my gcp server. But when I do wg-quick up, then I am unable to ssh into server
Abhi, [2023/1/17 11:09]
And my open vpn stop working
这看上去和woiden当时的情况很像 (开了warp以后就不能通过IPv4 SSH登录了)
所以解决方案也一样:
解决方案
https://github.com/crazypeace/warp.sh/blob/main/wgcf_postup_postdown.sh
原理
脚本
内容很简单:
sed -i '/PostUp/d' /etc/wireguard/wgcf.confsed -i '/PostDown/d' /etc/wireguard/wgcf.confsed -i "7 s/^/PostUp = ip -4 rule add from $(ip route get 1.1.1.1 | grep -oP 'src \K\S+') lookup main\n/" /etc/wireguard/wgcf.confsed -i "8 s/^/PostDown = ip -4 rule delete from $(ip route get 1.1.1.1 | grep -oP 'src \K\S+') lookup main\n/" /etc/wireguard/wgcf.conf
效果就是在 wgcf.conf 文件里添加两行:
PostUp = ip -4 rule add from 192.168.0.6 lookup mainPostDown = ip -4 rule delete from 192.168.0.6 lookup main
(上面这个例子是woiden里面跑起来的效果, 如果在 RackNerd 或者 CloudCone 上面跑起来是下面这样)
PostUp = ip -4 rule add from 64.27.22.164 lookup mainPostDown = ip -4 rule delete from 64.27.22.164 lookup main
IP地址
如果你用 ip a 命令查一下,你会发现这个蓝色的IP地址就是你SSH要进入这个VPS的IP。对于woiden来说,因为是NAT机,所以IP地址是个内网地址。对于RackNerd和Cloudcone来说,就是公网IP地址了。
ip a
PostUp PostDown
https://manpages.debian.org/unstable/wireguard-tools/wg-quick.8.en.html
Bing翻译:PreUp, PostUp, PreDown, PostDown — 在设置/拆除接口之前/之后由 bash(1) 执行的脚本片段,最常用于配置自定义 DNS 选项或防火墙规则。特殊字符串 '%i' 扩展为 INTERFACE。每个命令都可以多次指定,在这种情况下,命令将按顺序执行。
意思就是说在up之后,执行这行脚本
ip -4 rule add from SSH要连进来的IP地址 lookup main
在down之后,执行
ip -4 rule delete from SSH要连进来的IP地址 lookup main
ip命令
这两个ip命令与路由有关。具体谈起来水就深了。
你可以在warp启动后和关闭后,用 ip 命令看一下rule的变化。
ip -4 rule show
perl 正则里面的 \K
观察脚本,你会发现用到 grep -oP 命令。参数 -o 表示只留下匹配的部分;-P 表示使用perl正则表达式。
参考:https://www.cnblogs.com/f-ck-need-u/p/7462706.html
而在 perl 正则表达式中,\K 表示丢弃匹配的部分。
参考:https://junmajinlong.com/perl/perl_re/
'src \K\S+' 的意思是先匹配 src ,然后把src丢弃,然后开始匹配多个\S即非空字符。
思维拓展
以上谈的是在IPv4的环境下,用warp开一个IPv4的出站,导致不能从原有的IPv4进来的问题。
如果是在IPv6的环境下,用warp开一个IPv6的出站,也可能导致不能从原有的IPv6进来。
这时候在 wgcf.conf 里面
PostUp = ip -6 rule add from SSH要连进来的IPv6地址 lookup mainPostDown = ip -6 rule delete from SSH要连进来的IPv6地址 lookup main
ip -6 rule show
同样要注意, 如果你通过 ip a 查出来的IPV6地址并不是公网地址的话, 用这样的方法来查询 SSH连进来的IP地址
ip route get 2606:4700:4700::1111 | grep -oP 'src \K\S+'
然后再参考上面的PostUp PostDown去写到wgcf.conf里面
评论
发表评论