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;
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
'';
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 = [
{
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 ];
};