如何在中间的 OpenVPN 服务器提供的同一虚拟子网上的一个 OpenVPN 客户端和另一个客户端之间编写回显语句?就像我想从客户端回显一个字符串,而另一个客户端应该用一个字符串回复?
我正在尝试用运行 Debian Bullseye 和 openvpn 2.5.7 的 openvpn 服务器替换运行 Debian stretch 和 openvpn 2.4.0 的 openvpn 服务器,不幸的是,在旧操作系统上运行 openvpn 2.3 的旧客户端无法连接到新服务器。我现在无法轻松升级这些客户端。客户说(审查)。
Socket Buffers: R=[163840->131072] S=[163840->131072]
UDPv4 link local: [undef]
UDPv4 link remote: [AF_INET]xx.xx.xx.xx:1194
TLS: Initial packet from [AF_INET]xx.xx.xx.xx:1194, sid=xxxxxx xxxxxx
然后它会挂起一段时间,然后报告。
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS handshake failed
我用谷歌搜索了一下,但很难找到解决方案,我找到了关于数据通道密码的答案,但事情似乎还没有达到建立数据通道的程度。
我已经在私有网络上设置了一个 OpenVPN 服务器,以及一个 DNS 服务器来解析私有 DNS 地址。
在 OpenVPN 服务器上,我在客户端 DNS 配置中设置了私有 DNS 地址。我有三个客户端,分别运行 Android、Ubuntu 和 Raspbian。
Android 和 Ubuntu 客户端似乎使用私有服务器;至少我可以解析私人名称。但是,这在 Raspbian 客户端上不起作用:无法解析私有地址,并nslookup
返回来自客户端 LAN 上的 DNS 服务器的响应,而不是 VPN 的远程端。
当我在交互模式下运行 nslookup 并显式设置服务器时,查询被解析,这告诉我 DNS 查询可以通过 VPN 而不会被阻止。问题似乎是客户端正在查询错误的 DNS 服务器。
这是 Raspbian 客户端的配置:
client
remote 'vpn.example.org'
ca 'ca.pem'
cert 'cert.pem'
key 'key.pem'
cipher AES-128-CBC
dev tun
proto udp
verify-x509-name 'vpn.example.org'
tls-auth 'hmackey.pem' 1
auth SHA256
nobind
auth-nocache
script-security 2
persist-key
persist-tun
其他两个客户端是使用 GUI 工具配置的,因此我无法提供可靠的配置文件(他们提供 exp
我是否需要在客户端设置任何内容才能让客户端使用 VPN 上的 DNS 服务器?
我正在尝试设置一个新设备来连接到我的 OpenVPN 服务器。新设备是一个没有 GUI 的 Linux 系统。我从桌面 Linux 系统导出了配置文件并进行了必要的更改。
桌面系统可以连接到 VPN。但是,新系统无法连接。日志报告 TLS 握手超时。在服务器上,我看到以下条目:
TLS Error: cannot locate HMAC in incoming packet from ...
这表明客户端尚未配置 HMAC 身份验证,但服务器需要它。然而,这个配置是从一个可以工作并配置了 HMAC 密钥的客户端导出的。这是客户端配置:
client
remote 'vpn.example.org'
ca 'ca.pem'
cert 'cert.pem'
key 'key.pem'
cipher AES-128-CBC
dev tun
proto udp
verify-x509-name 'vpn.example.org'
tls-auth 'hmackey.pem' 1
nobind
auth-nocache
script-security 2
persist-key
persist-tun
HMAC 密钥在所有系统上都是相同的。怎么了?
我有一个 DS215J 并且想要执行以下操作:
- VPN 服务器使用 OpenVPN 运行 -> 完成
- 使用 synology.me 设置 DDNS -> 完成
- 导出 *.ovpn 文件并通过 Ubuntu 连接 -> 完成
- 问题:当连接到 VPN 时,Ubuntu 没有“主机名互联网访问”;只有对 ip 的 ping 有效
- 只要 Ubuntu 没有连接到 VPN,就可以访问互联网;连接后,只能进行 ip ping
路由器设置如下:
- 型号:Speedport Smart
- 转发到 NAS 的 TCP 端口:443、80、8080、8443 + 其他 3 个端口
- 转发到 NAS 的 UDP 端口:1194(用于 OpenVPN)、80、8080、8443、443
NAS 设置:
- OpenVPN 启动并运行
- 防火墙已禁用
- 通过 synology.me 启用 DDNS
- 没有配置静态路由
- OpenVPN 连接成功建立
打开 VPN 客户端命令行输出:
# openvpn --config /mnt/vpn/VPNConfig.ovpn --auth-user-pass /mnt/vpn/auth.conf
Thu Jan 27 21:40:38 2022 OpenVPN 2.4.7 aarch64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Jul 19 2021
Thu Jan 27 21:40:38 2022 library versions: OpenSSL 1.1.1f 31 Mar 2020, LZO 2.10
Thu Jan 27 21:40:38 2022 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Thu Jan 27 21:40:38 2022 TCP/UDP: Preserving recently used remote address: [AF_INET] .. <ip removed>
Thu Jan 27 21:40:38 2022 UDP link local (bound): [AF_INET][undef]:1194
Thu Jan 27 21:40:38 2022 UDP link remote: [AF_INET] .. <ip removed>
Thu Jan 27 21:40:38 2022 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Thu Jan 27 21:40:38 2022 [xxx.synology.me] Peer Connection Initiated with [AF_INET] .. <ip removed>
Thu Jan 27 21:40:40 2022 TUN/TAP device tun0 opened
Thu Jan 27 21:40:40 2022 /sbin/ip link set dev tun0 up mtu 1500
Thu Jan 27 21:40:40 2022 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
Thu Jan 27 21:40:40 2022 /etc/openvpn/update-resolv-conf tun0 1500 1553 10.8.0.6 10.8.0.5 init
Thu Jan 27 21:40:40 2022 Initialization Sequence Completed
*.ovpn 设置:
dev tun
tls-client
remote xxx.synology.me 1194
float
redirect-gateway def1
dhcp-option DNS 192.168.2.1
dhcp-option DNS 1.1.1.1
dhcp-option DNS 1.0.0.1
dhcp-option DNS 8.8.8.8
pull
proto udp
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
comp-lzo
reneg-sec 0
cipher AES-256-CBC
auth SHA512
auth-user-pass
...
我可以 ping 本地 ip 10.8.0.6 和外部 ip,但没有主机名:
# ping 10.8.0.6
PING 10.8.0.6 (10.8.0.6): 56 data bytes
64 bytes from 10.8.0.6: icmp_seq=0 ttl=64 time=0.707 ms
# ping www.microsoft.com
ping: unknown host
# ping 2.18.233.62
PING 2.18.233.62 (2.18.233.62): 56 data bytes
64 bytes from 2.18.233.62: icmp_seq=0 ttl=58 time=40.243 ms
# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1): 56 data bytes
64 bytes from 1.1.1.1: icmp_seq=0 ttl=57 time=42.636 ms
似乎DNS会引起麻烦,但我不知道下一步该做什么。
更新 2202/01/28:
# grep hosts: /etc/nsswitch.conf
hosts: files dns
# ls -l /etc/resolv.conf ; cat $_
-rw-r--r-- 1 root root 97 Jan 27 20:37 /etc/resolv.conf
# DNS requests are forwarded to the host. DHCP DNS options are ignored.
nameserver 192.168.65.5
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
13: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::a7fa:a4a5:a2e1:594/64 scope link stable-privacy
valid_lft forever preferred_lft forever
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:4/64 scope link
valid_lft forever preferred_lft forever
# systemd-resolve --status
sd_bus_open_system: No such file or directory
我有一个安装了 OpenVPN 守护程序的家庭 NAS 服务器,但是当没有人主动使用 NAS 上的 VPN 或文件时,我想让我的硬盘驱动器处于空闲模式(这样它们会持续更长时间)。
OpenVPN 守护进程阻止了这种情况,因为它不断将其 PID 写入文件:
root@NAS:~# iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 3.80 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
725 be/4 nobody 0.00 B/s 3.80 K/s 0.00 % 0.00 % openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]
4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]
这很烦人,因为我整晚都能听到硬盘开/关的声音,而且我担心由于不断旋转会缩短它们的使用寿命。
这是我可以在 iotop 中看到使用硬盘的唯一过程,所以我想这是我的硬盘在夜间不断旋转的唯一原因。
我正在尝试在 podman 非特权容器中运行 openvpn 服务器。
Openvpn 需要能够管理网络接口(即创建 tun 接口,为其分配 IP 地址,启动它)。在我的系统(arch linux)上,openvpn-server.service
我注意到CapabilityBoundingSet
这让我尝试并创建自己的服务,而不是运行 openvpn,而是运行podman run
.
首先我创建了我的 openvpn 容器,下面是 Dockerfile(为方便起见,我使用 archlinux 作为基础):
FROM archlinux
RUN pacman -Sy --noconfirm openvpn
然后我构建这个容器(登录为my_unprivileged_user
)
podman build \
--force-rm \
--no-cache \
--rm \
--device=/dev/net/tun \
-t openvpn .
然后我创建了my_custom_openvpn.service
:
Description=OpenVPN in Podman container
After=syslog.target network-online.target
Wants=network-online.target
[Service]
User=my_unprivileged_user
Group=my_unprivileged_group
WorkingDirectory=/etc/openvpn
ExecStart=/usr/bin/podman run --rm --name openvpn -v ./server:/server --device /dev/net/tun --network "host" --cap-add CAP_IPC_LOCK,CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_SETGID,CAP_SETUID,CAP_SYS_CHROOT,CAP_DAC_OVERRIDE,CAP_AUDIT_WRITE localhost/openvpn:latest /usr/bin/openvpn --config /server/my_config.conf
ExecStop=/usr/bin/podman stop -t 0 openvpn
Capabilities=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
#ProtectSystem=true
#ProtectHome=true
RestartSec=5s
Restart=on-failure
TimeoutSec=5s
[Install]
WantedBy=multi-user.target
所以我认为 systemd 会将功能传递给 podman,而后者又会将它们进一步向下传递给 openvpn。
但是 openvpn 无法开始抱怨它无法创建 tun0 接口。即使我像这样自己创建 tun0,我openvpn --mktun --dev tun0
也会收到另一个错误,即 openvpn 无法设置此 tun0 接口。
我想也许我需要setcap
在容器内做,所以我podman exec
进入它并在下面执行:
setcap CAP_IPC_LOCK,CAP_NET_ADMIN,CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_SETGID,CAP_SETUID,CAP_SYS_CHROOT,CAP_DAC_OVERRIDE,CAP_AUDIT_WRITE=+ep /usr/bin/openvpn
但这并没有帮助。我不断收到此错误:
Tue Jan 28 13:34:31 2020 /usr/bin/ip link set dev tun0 up mtu 1500
RTNETLINK answers: Operation not permitted
也许尝试使用这样的功能没有意义?
使用 OpenVPN 或 SSH 隧道(或组合),我如何将 2 个 LAN 网络连接在一起?
下面以 OpenVPN 为例进行更好(更详细)的解释:
一个 OpenVPN 客户端(我们称之为客户端 1)连接到 LAN A,也连接到 OpenVPN 服务器
此 OpenVPN 服务器位于云端(例如:Digitalocean)
另一个 OpenVPN 客户端(客户端 2)连接到 LAN B,也连接到 OpenVPN 服务器
我如何能够通过 OpenVPN 从客户端 2 看到 LAN A 上的其他设备,从而有效地将客户端 2 连接到 LAN A?
不知何故,对 Linux 来说是新手,过去曾使用过它,尽管不像现在那么广泛。
我在这里想要实现的是在计算机启动后立即启动 openvpn 服务。我已经部分实现了这一点。我有几个 .ovpn 文件被配置为连接到不同的国家。我首先创建了一个脚本,询问我想连接到哪个国家,然后建立连接。
现在我想做的是让它自动化,这样每次我启动到我的用户时,我希望服务提示我输入然后运行它。这里的问题是我无法强制服务提示我输入。
巴什代码:
#!/bin/bash
echo Which server do you want to connect
read -p 'Server(pt, se, nl, es, no, is, ch, de, ca, au, at): ' server
echo "You selected " $server
sudo openvpn /opt/ProtonVPN/$server.protonvpn.com.udp.ovpn
这段代码本身就很好用。
要创建服务,我遵循以下文章:如何为 shell 脚本创建服务,以便可以像守护进程一样启动和停止它?
所以我的服务文件如下所示:
[Unit]
Description=Connect to ProtonVPN
[Service]
Type=simple
ExecStart=/home/{user}/bin/proton-run.sh
然后我重新启动了守护进程:systemctl daemon-reload
我尝试使用:运行服务sudo systemctl start proton-run.service
,但从未收到输入提示,因此脚本崩溃,附上截图:
有什么帮助吗?我已阅读有关 systemd-ask-password 的信息,但我认为这不是我需要的。
网络拓扑是这样的:
OpenVPN 服务器:
Private IP (eth0): 10.0.4.23/16
Public IP (eth1): 77.20.30.40/24
Routes:
default via 77.20.30.1
10.0.0.0/16 (not routable, so no gateway)
10.8.0.0/16 via 10.0.0.65
在同一个私有子网上,我们为通过 OpenVPN 连接的客户端提供了 10.0.13.0/24 网络范围内的专用地址。因此客户端将 OpenVPN 服务器地址视为 10.0.13.1 作为网关。
客户端机器:
Public IP: 217.40.50.60
目前,当客户端连接到 VPN 服务器时,它无法看到私有范围内的子网。因此,我使用 OpenVPN 服务器 tun0 IP (10.0.13.1) 添加了到这些网络的路由
ip r add 10.0.0.0/16 via 10.0.13.1
ip r add 10.8.0.0/16 via 10.0.13.1
它不起作用。所以我在 OpenVPN 服务器上添加了 POSTROUTING iptables 规则
iptables -A POSTROUTING -s 10.0.13.0/24 -o eth0 -j MASQUERADE
那时它奏效了。但是,问题是,例如,当我连接到该私有子网中的服务器时10.0.4.20
,该服务器会将原始 IP 地址视为 OpenVPN 私有地址10.0.4.23
。
目前我们已经建立了 Microsoft VPN,当我们使用它时,所有服务器都可以看到由 VPN 分配的客户端 IP 地址,因此可以完成(也许)但我不确定我哪里弄错了。
这是 OpenVPN Server 配置文件,为了方便读者,去掉了注释。
port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.0.13.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DNS 10.0.0.2"
push "route 10.0.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_oy94rAaIiMtrnvAB.crt
key server_oy94rAaIiMtrnvAB.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
status /var/log/openvpn/status.log
log /var/log/openvpn/openvpn.log
verb 3
plugin /opt/openvpn-ldap-auth/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
client-cert-not-required
我尝试设置server 10.0.13.0 255.255.255.0
为server 10.0.13.0 255.255.0.0
应该是网络,但 OpenVPN 服务器不喜欢该配置,并且如果子网中的第一个八位字节不是,则不想启动0
。
所以为了简单起见:我如何制作一些位于 10.0.0.0/16 网络上的服务器,访问位于 10.0.13.0/24 上的 VPN 客户端。或者更好的是,我如何让 OpenVPN 服务器分配给 10.0.13.0/24 范围内的客户端 IP 地址,但实际上让它们属于 10.0.0.0/16?我可能需要在同一台服务器上安装单独的 DHCP 服务器吗?