Tôi muốn cấp quyền truy cập cho các nhà khai thác sử dụng wireguard cho các dịch vụ như PostgreSQL, nginx, ssh, v.v. mà không cần cung cấp IP công khai của máy chủ.
Tôi sử dụng nixos, nhưng một thiết lập đơn giản với wireguard + iptables có thể phù hợp với tôi.
Đường hầm được thiết lập và các gói được truyền, như được hiển thị (trên máy chủ):
¯ wg
giao diện: wg0
khóa công khai: k4lOk+/rXONPolNI...
khóa riêng: (ẩn)
cổng nghe: 51820
ngang hàng: VCH3gPI0qu0rUKMR...
điểm cuối: ...:51820
IP được phép: 10.100.0.2/32
cái bắt tay mới nhất: 32 giây trước
chuyển khoản: 53,11 KiB đã nhận, 1,05 KiB đã gửi
Nhưng không thể kết nối với postgres với psql -h 10.100.0.2 -U postgres
hoặc máy chủ web với cuộn tròn 10.100.0.1
từ máy khách (từ máy chủ nó hoạt động).
Tôi có máy chủ (nơi đặt PostgreSQL):
[Giao diện]
Địa chỉ = 10.100.0.1/32
Cổng nghe = 51820
Khóa riêng tư = AIaYgTe...
[Ngang nhau]
Khóa công khai = VCH3gPI0qu...
IP được phép = 10.100.0.2/32
Điểm cuối = x.x.x.x:51820
Tôi có khách hàng (peer1)
[Giao diện]
Khóa riêng tư = cLUTCqLAj2aq...
Cổng nghe = 51820
Địa chỉ = 10.100.0.2/32
[Ngang nhau]
Khóa công khai = k4lOk+/rXONP...
IP được phép = 0.0.0.0/0
Điểm cuối = x.x.x.x:51820
liên tụcKeepalive = 10
Tôi đã thử nhiều cách để thiết lập tường lửa, hiện tại:
mạng.nat.enable = true;
mạng.nat.externalInterface = "eth0";
mạng.nat.internalInterfaces = [ "wg0" ];
mạng.wireguard.interfaces = {
wg0 = {
giao diện.
ips = [ "10.100.0.1/32" ];
nghePort = 51820;
# ${pkgs.iptables}/bin/iptables -t nat -A PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 192.168.88.1
# ${pkgs.iptables}/bin/iptables -A INPUT -i wg0 -m state --state NEW -p tcp -m multiport --dports 80,443,22,5432 -j CHẤP NHẬN
postSetup = ''
${pkgs.iptables}/bin/iptables -I CHUYỂN ĐỔI 1 -i wg0 -j CHẤP NHẬN;
${pkgs.iptables}/bin/iptables -t nat -I POSTROUTING 1 -o eth0 -j MASQUERADE
${pkgs.iptables}/bin/iptables -t nat -A PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 127.0.0.1
'';
# Điều này hoàn tác lệnh trên
postShutdown = ''
${pkgs.iptables}/bin/iptables -D PHÍA TRƯỚC -i wg0 -j CHẤP NHẬN;
${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
${pkgs.iptables}/bin/iptables -t nat -D PREROUTING -i wg0 -p tcp --match multiport --destination-ports 22,5432,443,80 -j DNAT --to-destination 127.0.0.1
'';
privateKeyFile = "/root/wireguard_private";
đồng nghiệp = [
# Danh sách các đồng nghiệp được phép.
{ # ngang hàng1
publicKey = "VCH3gPI0qu0rUK...";
allowIPs = [ "10.100.0.2/32" ];
}
];
};
};
mạng.firewall = {
bật = đúng;
allowPing = true;
cho phépUDPPorts = [51820];
allowTCPPorts = [ 80 443 22 ];
interfaces.wg0.allowedTCPPorts = [ 993 68 80 443 22 5432 ];
};