인터넷에 대한 Rocky linux 9wireguard 스푸핑 트래픽이 작동하지 않습니다.

인터넷에 대한 Rocky linux 9wireguard 스푸핑 트래픽이 작동하지 않습니다.

Wireguard가 설치되어 있고 로컬 리소스에 액세스하는 것은 잘 작동하지만 교통 위장을 시작할 수 없고 인터넷 액세스를 열 수 없습니다. Red Hat의 지침에는 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/010.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/에 구성이 없으면 /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 방화벽은 nftables 커널 하위 시스템을 기반으로 합니다. iptables 명령을 사용하는 것도 래퍼입니다.https://docs.rockylinux.org/guides/security/firewalld/

유용한 방화벽 예제는 여기에서 찾을 수 있습니다:https://www.thegeekdiary.com/5-useful-examples-of-firewall-cmd-command/

답변3

처음에는 새 Wireguard 인터페이스에 영역이 할당되지 않습니다 wg0. 이 구역에 위장을 추가하면 publicWireguard를 통해 연결된 사람들이 인터넷에 액세스할 수 있습니다. 그러나 인터페이스에 영역을 할당하면 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

관련 정보