Rocky linux 9wireguard 伪装到互联网的流量不起作用

Rocky linux 9wireguard 伪装到互联网的流量不起作用

安装了wireguard,访问本地资源效果良好,但无法启动流量伪装,无法打开互联网访问。红帽的说明不包含如何为通过wireguard连接的客户端打开互联网访问的步骤描述,并且对于以前的版本以旧方式设置不起作用。SELINUX=disabled也许有人明白如何解决这个问题?

服务器上的 wg0.conf

[Interface]
Address    = 10.10.0.1/24
ListenPort = 51820
PrivateKey = ACvFwT2hwYQJi4oI1f1cMgJyH8fFtmQ3j4QV1sjqcm0=   

[Peer]
PublicKey =  RvQSExSi6KUzxqFXjfCWNkH1uLRw96OMF/F/OY74Qys=
AllowedIPs = 10.10.0.2

运行wireguard并打开端口

systemctl enable --now wg-quick@wg0
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --permanent --change-zone=wg0 --zone=work
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload

客户端配置

[Interface]
PrivateKey = iMkLdAEgXm4SQebjhcd/h7qE4Gu0glm25Uug6BjIrnc=
Address = 10.10.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = 0Uryjm4u1VdJ4ggVabPx+YyiMJG5xnBdvGlbE1ZvqHc=
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = serverIp:51820
PersistentKeepalive = 20

在之前的版本 rocky 8 中,这足以在连接到wireguard 时使互联网访问正常工作。

sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
firewall-cmd --permanent --zone=public --add-masquerade

upd:创建配置bash脚本并执行

vi shell.sh
chmod +x shell.sh
./shell.sh

脚本内容

#!/bin/bash
yes | yum install -y epel-release 2>&1;
yes | yum update -y 2>&1;
yes | yum install wireguard-tools -y 2>&1;

#wireguard
$(wg genkey | tee /etc/wireguard/$HOSTNAME.private.key | wg pubkey > /etc/wireguard/$HOSTNAME.public.key)
privateKey=$(<"/etc/wireguard/$HOSTNAME.private.key")


cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address    = 10.10.0.1/24
ListenPort = 51820
PrivateKey = $privateKey


[Peer]
PublicKey =  PEER-PUBLIC-KEY_HERE
AllowedIPs = 10.10.0.2
EOF

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --permanent --zone=public--add-masquerade
firewall-cmd --reload
systemctl enable --now wg-quick@wg0

*注意,服务不会启动,因为您需要在/etc/wireguard/wg0.conf适当的位置重新定义用户密钥PEER-PUBLIC-KEY_HERE然后执行systemctl enable --now wg-quick@wg0

输出

iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

答案1

首先,您不应该将密钥粘贴到堆栈上。您应该用REDACTED类似的东西替换它们,为了您自己的安全,请生成新的密钥对。

尝试AllowedIPs在客户端上将0.0.0.0/1其更改为0.0.0.0/0,在服务器上将对等配置块更改为10.10.0.2/32并重试。

如果它不起作用,请尝试通过手动设置界面在服务器端使用没有 wg-quick 的所有内容,wg-quick 可能会做一些奇怪的事情,值得一试。

我也不确定它的作用: firewall-cmd --permanent --change-zone=wg0 --zone=work 但请检查您是否在 eth0 和 wg0 之间的 Firewalld 上启用了 ip 转发。这里也可能被封锁。

我个人不喜欢 iptables/nftables 包装器,我不理解它所做的一切,但该规则中的区域似乎与其他区域不同,因此它可能会被不正确的防火墙配置阻止,特别是在设置了默认转发策略的情况下下降。

答案2

Rocky 8 升级到 9 后我也遇到了同样的问题。在我的设置中,活动区域未启用转发。我的区域设置有所不同,因此我已将区域名称更改为您的设置,并希望它也适用于您的网站。

列出活动区域:

firewall-cmd --get-active-zones

  internal
    interfaces: wg0
  public
    interfaces: ens3

要列出所有可用区域,您可以使用firewall-cmd --list-all-zones

获取有关您的活动区域设置的更多详细信息:

firewall-cmd --zone=public --list-all

  public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens3
    sources: 
    services: ssh wireguard
    ports:
    protocols: 
    forward: no
    masquerade: yes
    forward-ports: 
    source-ports: 
    icmp-blocks: 
    rich rules: 

确保转发和伪装已启用!在我的设置中,转发被禁用(转发:否)。为了进行比较,这些是我的wireguard 接口的区域设置。

firewall-cmd --zone=internal --list-all

  internal (active)
    target: default
    icmp-block-inversion: no
    interfaces: wg0
    sources: 
    services: 
    ports: 
    protocols: 
    forward: yes
    masquerade: no
    forward-ports: 
    source-ports: 
    icmp-blocks: 
    rich rules: 

要启用转发或更改您的设置,请编辑区域配置文件。就我而言,我已添加<forward/>到活动公共区域。假面舞会是由你的剧本设定的。

vi /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <forward/>
</zone>

如果 /etc/firewalld/zones/ 中没有配置,您可以在以下位置找到默认的 firewalld 配置文件: /usr/lib/firewalld/zones

对配置进行更改后,重新加载防火墙。

firewall-cmd --reload

检查您的配置是否到位。

firewall-cmd --list-all

  public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens3
    sources: 
    services: ssh wireguard
    ports:
    protocols: 
    forward: yes
    masquerade: yes
    forward-ports: 
    source-ports: 
    icmp-blocks: 
    rich rules: 

顺便说一句:Rocky 9 firewalld 基于 nftables 内核子系统。使用 iptables 命令也是一个包装器。https://docs.rockylinux.org/guides/security/firewalld/

有用的 firewalld 示例可以在这里找到:https://www.thegeekdiary.com/5-useful-examples-of-firewall-cmd-command/

答案3

最初,没有区域分配给新的wireguard 接口wg0。如果您为该区域添加伪装,public您的互联网访问将适用于那些通过wireguard 连接的人。但是,如果您将任何区域分配给您的wg0接口,对互联网的访问将会停止,因为默认情况下不允许从一个区域到另一个区域的流量方向。您需要允许流量从一个区域重定向到另一区域。例如分配给接口wg0区域work ,然后我打开从一个区域到另一个区域的访问

firewall-cmd --new-policy work-public --permanent
firewall-cmd --reload
firewall-cmd --policy work-public --add-ingress-zone=work --permanent
firewall-cmd --policy work-public --add-egress-zone=public --permanent
firewall-cmd --policy work-public --set-target=ACCEPT --permanent
firewall-cmd --reload

您可以通过以下方式获取有关新政策的信息

firewall-cmd --info-policy work-public

相关内容