我刚刚在 Google Cloud 平台上安装了一台 Debian 机器。现在我有一个 Debian 服务器和一个 Windows 客户端。我可以以“普通”方式从客户端 ssh 到服务器。之后我在 Debian 上安装了 OpenVPN 服务器。此时我可以通过 OpenVPN 连接两台机器。
但现在开始我所有的问题。如果我建立 VPN,我就可以在两个设备之间进行通信,但不能与任何其他设备进行通信!
如果我连接了 VPN,我的客户端就会停止与网络的其他部分通信。
在 VPN 下我想要以下地址 172.16.0.1 服务器 172.16.0.2 客户端
在服务器端
# netstat -nr -f inet
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.138.0.1 0.0.0.0 UG 0 0 0 ens4
10.138.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ens4
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
# cat /proc/sys/net/ipv4/ip_forward
1
# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
我想念什么?如果您需要任何其他信息,请告诉我。谢谢
这是我的客户端 OpenVPN 配置文件:
client
dev tun
proto udp
remote xxx.hopto.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
<ca>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
xxx
-----END PRIVATE KEY-----
</key>
<tls-crypt>
-----BEGIN OpenVPN Static key V1-----
xxx
-----END OpenVPN Static key V1-----
</tls-crypt>
这是服务器端
$ cat /etc/openvpn/server/server.conf
local 10.138.0.2
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 172.16.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify
连接时来自客户端的更多信息:
>ping 1.1.1.1
Esecuzione di Ping 1.1.1.1 con 32 byte di dati:
Richiesta scaduta.
Richiesta scaduta.
Richiesta scaduta.
Richiesta scaduta.
Statistiche Ping per 1.1.1.1:
Pacchetti: Trasmessi = 4, Ricevuti = 0,
Persi = 4 (100% persi),
>tracert 1.1.1.1
Traccia instradamento verso 1.1.1.1 su un massimo di 30 punti di passaggio
1 150 ms 149 ms 150 ms 172.16.0.1
2 * * * Richiesta scaduta.
3 * * * Richiesta scaduta.
4 * * * Richiesta scaduta.
5 * * * Richiesta scaduta.
>nslookup unix.stackexchange.com 1.1.1.1
DNS request timed out.
timeout was 2 seconds.
Server: UnKnown
Address: 1.1.1.1
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
2022 年 3 月 10 日更新
这是没有 VPN 的跟踪器日志
>tracert 1.1.1.1
Traccia instradamento verso one.one.one.one [1.1.1.1]
su un massimo di 30 punti di passaggio:
1 1 ms 2 ms 2 ms 192.168.1.1
2 3 ms 1 ms 3 ms 2.112.209.88.static.monaco.mc [88.209.112.2]
3 3 ms 2 ms 2 ms l5.pe01ftv.monaco-telecom.net [195.78.0.66]
4 * 3 ms 3 ms l1.pe01cst.monaco-telecom.net [195.78.0.65]
5 6 ms 6 ms 8 ms l500.pe01mrs.monaco-telecom.net [195.78.0.89]
6 * * * Richiesta scaduta.
7 8 ms 7 ms 6 ms be2065.ccr31.mrs02.atlas.cogentco.com [154.54.37.245]
8 13 ms * * 149.6.154.130
9 12 ms 12 ms 11 ms one.one.one.one [1.1.1.1]
Traccia completata.
2022 年 3 月 18 日更新
我在网上搜索以找到解决方案
我在一个网站上发现我的配置与该网站上的配置之间存在差异。
运行以下命令
$ sudo systemctl cat openvpn-iptables.service
我注意到我得到了以下结果
ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 10.138.0.2
在网站中网络地址转换部分被指定为公共地址。这会是问题所在吗?
答案1
问题是这样的:
push "redirect-gateway def1 bypass-dhcp"
如果您阅读 OpenVPN 的文档(man openvpn
这是一个很好的起点),您可以了解这些选项的作用:
--redirect-gateway flags…
自动执行路由命令以使所有传出 IP 流量通过 VPN 重定向。这是一个客户端选项。
然后继续解释两个选项标志:
def1
0.0.0.0/1
- 使用此标志通过使用和128.0.0.0/1
而不是 来覆盖默认网关0.0.0.0/0
。这样做的好处是可以覆盖但不会清除原始默认网关。
bypass-dhcp
-- 添加绕过隧道的到 DHCP 服务器的直接路由(如果它是非本地的)[...]。
该redirect-gateway
选项由服务器在连接时发送到客户端。它告诉客户端发送所有流量通过VPN。不仅仅是目标网络的数据,而是一切。
在我看来,您不想要此选项,但只有目标网络的流量应通过 VPN 路由。