ฉันต้องการให้สิทธิ์การเข้าถึงแก่ผู้ให้บริการโดยใช้ wireguard กับบริการต่างๆ เช่น PostgreSQL, nginx, ssh และอื่นๆ โดยไม่ต้องให้ IP สาธารณะของโฮสต์
ฉันใช้ nixos แต่การตั้งค่าธรรมดาด้วย wireguard + iptables สามารถทำงานได้สำหรับฉัน
อุโมงค์ถูกสร้างขึ้นและแพ็กเก็ตกำลังถ่ายโอน ดังที่แสดง (บนเซิร์ฟเวอร์):
¯ก
อินเทอร์เฟซ: wg0
รหัสสาธารณะ: k4lOk+/rXONPolNI...
รหัสส่วนตัว: (ซ่อน)
พอร์ตการฟัง: 51820
เพียร์: VCH3gPI0qu0rUKMR...
จุดสิ้นสุด: ...:51820
ips ที่อนุญาต: 10.100.0.2/32
การจับมือครั้งล่าสุด: 32 วินาทีที่แล้ว
การโอน: ได้รับ 53.11 KiB, ส่ง 1.05 KiB
แต่ไม่สามารถเชื่อมต่อกับ postgres ด้วย psql -h 10.100.0.2 -U postgres
หรือเว็บเซิร์ฟเวอร์ด้วย ขด 10.100.0.1
จากลูกค้า (จากเซิร์ฟเวอร์ใช้งานได้)
ฉันมีเซิร์ฟเวอร์ (ที่ตั้งของ PostgreSQL):
[อินเตอร์เฟซ]
ที่อยู่ = 10.100.0.1/32
ListenPort = 51820
PrivateKey = AIaYgTe...
[เพียร์]
PublicKey = VCH3gPI0qu...
IP ที่อนุญาต = 10.100.0.2/32
จุดสิ้นสุด = x.x.x.x:51820
ฉันมีลูกค้า (peer1)
[อินเตอร์เฟซ]
คีย์ส่วนตัว = cLUTCqLAj2aq...
ListenPort = 51820
ที่อยู่ = 10.100.0.2/32
[เพียร์]
PublicKey = k4lOk+/rXONP...
IP ที่อนุญาต = 0.0.0.0/0
จุดสิ้นสุด = x.x.x.x:51820
ถาวรKeepalive = 10
ฉันได้ลองหลายวิธีในการตั้งค่าไฟร์วอลล์แล้วในขณะนี้:
networking.nat.enable = จริง;
networking.nat.externalInterface = "eth0";
networking.nat.internalInterfaces = [ "wg0" ];
networking.wireguard.interfaces = {
wg0 = {
อินเตอร์เฟซ.
ips = [ "10.100.0.1/32" ];
ฟังพอร์ต = 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 ยอมรับ
โพสต์เซ็ตอัพ = ''
${pkgs.iptables}/bin/iptables -I ส่งต่อ 1 -i wg0 -j ยอมรับ;
${pkgs.iptables}/bin/iptables -t nat -I การโพสต์ 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 ส่งต่อ -i wg0 -j ยอมรับ;
${pkgs.iptables}/bin/iptables -t nat -D โพสต์ -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 = "/รูท/wireguard_private";
เพื่อน = [
# รายชื่อเพื่อนที่ได้รับอนุญาต
{ # เพียร์1
publicKey = "VCH3gPI0qu0rUK...";
AllowIPs = [ "10.100.0.2/32" ];
}
];
};
};
เครือข่าย ไฟร์วอลล์ = {
เปิดใช้งาน = จริง;
allowPing = จริง;
อนุญาต UDPPorts = [ 51820 ];
TCPPorts ที่อนุญาต = [ 80 443 22 ];
interfaces.wg0.allowedTCPPorts = [ 993 68 80 443 22 5432 ];
};