Các thiết lập
Tôi có cấu trúc liên kết sau:
Router
172.25.214.1
|
|
|
SiteB
172.25.214.0/24
|
|
|
LAN: 172.25.214.3
OpenVPN server+client B
TUN0: 172.25.215.1 TUN1: 10.1.2.2
| |
| |
| |
VpnSiteB VpnSiteA
172.25.215.0/24 10.1.2.0/24
| |
| |
| |
TUN1: 172.25.215.2 TUN0: 10.1.2.1
OpenVPN server+client A
LAN: 10.1.1.3
|
|
|
SiteA
10.1.1.0/24
|
|
|
Router
10.1.1.1
Trên mỗi trang, máy chủ + máy khách OpenVPN là Raspberry Pi chạy một phiên bản máy chủ của OpenVPN và một phiên bản máy khách của OpenVPN.
Bảng định tuyến kernel trên máy chủ OpenVPN SiteA:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.1.1.1 0.0.0.0 UG 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
172.25.214.0 172.25.215.1 255.255.255.0 UG 20 0 0 tun1
172.25.214.0 10.1.2.2 255.255.255.0 UG 30 0 0 tun0
172.25.215.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
và của máy chủ OpenVPN trên SiteB:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.25.214.1 0.0.0.0 UG 0 0 0 eth0
10.1.1.0 10.1.2.1 255.255.255.0 UG 20 0 0 tun1
10.1.1.0 172.25.215.2 255.255.255.0 UG 30 0 0 tun0
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
172.25.214.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.25.215.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
Như bạn thấy, các mạng duy nhất có nhiều tuyến là SiteA và SiteB. Cả hai máy chủ OpenVPN đều thích định tuyến đến trang khác thông qua giao diện máy khách / mạng OpenVPN.
Vấn đề
Hầu hết các định tuyến hoạt động tốt. Bất kỳ máy chủ lưu trữ nào trên SiteA đều có thể giao tiếp hai chiều với
- Bất kỳ giao diện máy chủ nào trên SiteB
- Bất kỳ giao diện máy chủ nào trên VpnSiteA
- Bất kỳ giao diện máy chủ nào trên VpnSiteB ngoại trừ TUN0 / 172.25.215.1
Tức là một máy chủ trên SiteA có thể ping
- 10.1.1.3
- 10.1.2.1
- 172.25.215.2
- 172.25.214.3
- 10.1.2.2
- Nhưng không phải là 172.25.215.1
Đó là những gì tôi muốn giải quyết.
Khắc phục sự cố tôi đã thực hiện
Kiểm tra 1
Trên một máy chủ lưu trữ trên SiteA, tôi ping 172.25.215.1 và theo dõi những gì đã xảy ra với TCPDUMP
cả hai máy chủ OpenVPN.
- Yêu cầu Echo đến OpenVPN lưu trữ SiteA trên giao diện LAN của nó
- Yêu cầu Echo rời OpenVPN lưu trữ SiteA trên giao diện TUN1 của nó
- Yêu cầu Echo đến OpenVPN lưu trữ SiteB trên giao diện TUN0 của nó
- Echo trả lời rời khỏi máy chủ lưu trữ OpenVPN SiteB trên giao diện TUN1 của nó
- Không có phản hồi Echo nào đến OpenVPN lưu trữ SiteA trên bất kỳ giao diện nào của nó.
Vì vậy, đây là một cái gì đó đi sai.
Kiểm tra 2
Tôi đã vô hiệu hóa máy chủ OpenVPN trên máy chủ OpenVPN của SiteA và vô hiệu hóa ứng dụng khách OpenVPN trên máy chủ OpenVPN nếu SiteB. Nói cách khác, bây giờ chỉ có một đường hầm. Lần này, tôi đã thành công trong việc ping 172.25.215.1 từ một máy chủ lưu trữ trên SiteA.
Vì vậy, khi tôi có hai đường hầm, có gì đó không ổn.
Lý lịch
Tại sao không chỉ là một đường hầm? Thỉnh thoảng, ISP của tôi ở cả hai trang web đều ngừng gán cho tôi một địa chỉ IP công cộng, đặt tôi phía sau CGN. Nếu điều này xảy ra trên trang web lưu trữ máy chủ OpenVPN, kết nối giữa các trang sẽ bị hỏng. Nhưng nếu cả hai trang web đều chạy một máy chủ OpenVPN, nếu một trang web đứng sau CGN, không có vấn đề gì.
ruột thừa
server.conf
của trang chủ OpenVPN Trang webA:
; General
; ---------------------------------------------------------
dev tun0
proto udp
port xxxx
client-config-dir /etc/openvpn/ccd
keepalive 10 120
max-clients 20
tls-server
verb 2
; Network
; ---------------------------------------------------------
topology subnet
client-to-client
server 10.1.2.0 255.255.255.0
route 172.25.214.0 255.255.255.0 10.1.2.2 30
client.conf
của trang chủ OpenVPN Trang webA:
; General
; ---------------------------------------------------------
client
dev tun1
proto udp
remote xxxx
resolv-retry infinite
connect-retry 5 1800
explicit-exit-notify
nobind
tls-client
verb 2
; Network
; ---------------------------------------------------------
script-security 2
up /etc/openvpn/uppe.sh
down /etc/openvpn/nere.sh
up-restart
up-delay
iproute /usr/local/sbin/unpriv-ip
Lưu ý: cài đặt liên quan đến bảo mật được loại bỏ.
uppe.sh
:
#!/bin/bash
/usr/local/sbin/unpriv-ip route add 172.25.214.0/24 via 172.25.215.1 dev tun1 metric 20
exit 0
nere.sh
#!/bin/bash
/usr/local/sbin/unpriv-ip route del 172.25.214.0/24 via 172.25.215.1 dev tun1 metric 20
exit 0
Hai điều này liên quan đến giảm thiểu CGN.
Các tệp cho máy chủ OpenVPN trên SiteB giống hệt nhau ngoại trừ các địa chỉ mạng khác nhau.