Instalação:
Eu tenho uma configuração de cliente / servidor openvpn (arquivos de configuração na parte inferior) e recebo a infame MULTI: bad source address from client [192.168.x.x], packet dropped
mensagem no servidor. O servidor tem um endereço IP público, enquanto o cliente está atrás do NAT.
Deficiências das soluções propostas anteriormente:
o client-config-dir
definido na configuração do servidor está vazio no momento. As postagens anteriores (aqui e nos fóruns de suporte do openvpn) sugerem adicionar um arquivo nomeado DEFAULT
com as regras apropriadas client-config-dir
ou adicionar um arquivo por usuário com essas regras para resolver o problema.
No entanto, isso não parece ser uma solução a longo prazo, porque essas regras são específicas da localização do cliente. Portanto, posso adicionar uma regra para permitir que os clientes 192.168.x.0
se conectem. Mas se eles se conectarem a partir de outra rede que, em vez disso, usa 192.168.y.0
para NAT, será necessária uma nova regra.
Questões:
- As regras necessárias podem ser escritas de maneira genérica / única?
- Alguém pode explicar por que esse problema ocorre em primeiro lugar?
Configuração do servidor:
port 1234
proto tcp
dev tun
ca ca.crt
cert openvpn.crt
key openvpn.key
dh dh2048.pem
server 10.78.96.0 255.255.255.0
keepalive 10 120
comp-lzo
cipher CAMELLIA-128-CBC
user nobody
group nogroup
persist-key
persist-tun
client-cert-not-required
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
status openvpn-status.log
push "redirect-gateway def1"
push "remote-gateway 1.2.3.4"
push "dhcp-option DNS 8.8.8.8"
client-config-dir ccd
verb 4
Configuração do cliente:
ca ca.crt
client
dev tun
proto tcp
remote 1.2.3.4 1234
auth-user-pass
script-security 2
keepalive 5 60
topology subnet
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
cipher CAMELLIA-128-CBC
comp-lzo
verb 4
192.168.x.0
e um cliente que está na192.168.y.0
rede? Eles estão todos na mesma192.168.x.x/16
rede que você definiu ... (?)Respostas:
Você perguntou: " Alguém pode explicar por que esse problema ocorre em primeiro lugar? "
Com base no que é relatado nas perguntas frequentes oficiais do OpenVPN , aposto que é causado por um problema de roteamento no mecanismo OpenVPN.
Para esclarecer melhor o cenário, deixe-me consultar o seguinte diagrama:
Aqui você pode ver:
Além disso
Agora, vamos supor que:
Com esse cenário, vamos verificar em detalhes o que acontece quando R_PC1 (192.168.1.2) envia um pacote, como uma solicitação de eco, para L_PC1 (10.0.1.2):
Então está tudo bem ...
Agora vamos verificar o que acontece com a resposta de eco que L_PC1 responde a R_PC1.
Agora, se queremos que o OpenVPN Server possa acessar o site remoto, precisamos definir o roteamento com uma "rota estática". Algo como:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.10.0.2
Observe o endereço P2P usado como gateway .
Essas rotas estáticas funcionarão no nível do SO. Em outras palavras, é necessário que o sistema operacional roteie adequadamente o pacote. Significa algo como: "Por favor, todo o tráfego endereçado à sub-rede 192.168.1.0/24 precisa ser encaminhado para o mecanismo OpenVPN, com quem o sistema operacional pode falar através do endereço P2P". Graças a essa rota estática, agora ...
Então, agora, o problema é: como, o software do servidor openvpn, poderá decidir a rota de um pacote, com SRC_IP 10.0.1.2 e DST_IP 192.168.1.2 ?
Observe que, com base na configuração do servidor OpenVPN, ele não sabe nada sobre a rede 192.168.1.0/24, nem sobre o host 192.168.1.2. É não um cliente conectado. É não um cliente local. E entao? OpenVPN, também, sabe que é não o "OS-Router", então ele realmente não quer (e pode ....) enviar a parte de trás do pacote para o gateway local. Portanto, a única opção, aqui, é gerar um erro. Exatamente o erro que você está enfrentando
Para dizê-lo com o idioma da FAQ: " ... ele não sabe como rotear o pacote para esta máquina, então ele solta o pacote ... ".
Como podemos resolver o problema?
Como você pode ver na documentação oficial , a opção iroute serve exatamente para o nosso escopo:
Então você precisa de:
a ser aplicado (ao servidor) quando o seu cliente OpenVPN se conectar, por exemplo, através de um arquivo de configuração ad-hoc definido no servidor (client-config-dir, etc.).
Se você se perguntar por que esse problema não ocorre na etapa 2) acima, meu entendimento é que o OpenVPN Client sabe como rotear isso, porque sabe que o túnel da VPN é um gateway padrão.
O mesmo não pode ser feito no servidor OpenVPN, porque o gateway padrão normalmente não é substituído. Além disso, considere que você poderia ter um único servidor OpenVPN com bastante cliente OpenVPN: cada cliente sabe como acessar o servidor, mas ... como o servidor pode decidir qual é o cliente que atua como gateway para uma sub-rede desconhecida?
Quanto à sua primeira pergunta ( as regras necessárias podem ser escritas de maneira genérica / única? ), Desculpe-me, mas não estou tendo muito problema. Você pode reformular o fornecimento de mais detalhes?
fonte
Eu tive um problema que parece semelhante, mas não tenho certeza se é o mesmo que o seu problema. Eu estava tentando fazer ping de um cliente openvpn para um computador na rede local do servidor openvpn (roteado na configuração do servidor), não obtendo resposta e pude ver a mensagem "endereço de origem incorreto" no log do servidor openvpn.
Para resolvê-lo, eu tive que fazer duas coisas:
Isso consertou para mim.
fonte