對于WireGuard及用途,您需要設(shè)置和配置服務(wù)器防火墻規(guī)則。需要配置NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換),以允許WireGuard客戶端訪問互聯(lián)網(wǎng)。在Linux中,我們使用一個術(shù)語叫做IP偽裝。它的意思是一對多的NAT(1:Many)。我們還需要一個forWARD鏈規(guī)則。本文介紹了如何在Linux中為WireGuard設(shè)置NAT和forWARD防火墻規(guī)則。
步驟1:設(shè)定NAT防火墻規(guī)則
語法如下:
# iptables -t nat -I POSTROUTING 1 -s {sub/net} -o {interface} -j MASQUERADE
確保所有出站數(shù)據(jù)包通過VPN編譯:
# iptables -t nat -I POSTROUTING 1 -s 10.8.1.0/24 -o eth0 -j MASQUERADE
其中
-t nat :為WireGuard設(shè)置nat表。
-I POSTROUTING 1 :在位置1插入規(guī)則,用于改變即將發(fā)出POSTROUTING鏈的數(shù)據(jù)包。
-s 10.8.1.0/24 :只有當(dāng)源地址由WireGuard wg0接口創(chuàng)建時才進(jìn)行NAT。
-o eth0:接口名稱,通過該接口將發(fā)送數(shù)據(jù)包。在這種情況下,eth0連接到Internet。
-j MASQUERADE: 告訴(跳轉(zhuǎn))如果數(shù)據(jù)包根據(jù)給定的條件匹配,該怎么做。MASQUERADE目標(biāo)只在nat表中有效,在POSTROUTING鏈中。該規(guī)則負(fù)責(zé)為所有WireGuard客戶端路由到互聯(lián)網(wǎng)的流量。
步驟2:接受wg0接口創(chuàng)建的所有流量
允許wg0接口上的所有流量: 上面的規(guī)則允許目的地為wg0的數(shù)據(jù)包。
# iptables -I INPUT 1 -i {interface} -j ACCEPT
# iptables -I INPUT 1 -i wg0 -j ACCEPT
步驟3:配置forWARD規(guī)則
我們必須通過設(shè)置forWARD規(guī)則允許數(shù)據(jù)包通過WireGuard服務(wù)器路由。語法為:
# iptables -I forWARD 1 -i eth0 -o wg0 -j ACCEPT
# iptables -I forWARD 1 -i wg0 -o eth0 -j ACCEPT
步驟4:打開WireGuard UDP端口#51194
最后,如下打開UDP端口號51194:
# iptables -I INPUT 1 -i eth0 -p udp –dport 51194 -j ACCEPT
步驟5:刪除WireGuard iptables規(guī)則的命令
我們可以通過刪除所有添加的iptabes規(guī)則來撤消所有命令,如下所示:
# iptables -t nat -D POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE
# iptables -D INPUT -i wg0 -j ACCEPT
# iptables -D forWARD -i eth0 -o wg0 -j ACCEPT
# iptables -D forWARD -i wg0 -o eth0 -j ACCEPT
# iptables -D INPUT -i eth0 -p udp –dport 51194 -j ACCEPT
步驟6:在Linux上啟用IP轉(zhuǎn)發(fā)
對于IPv4,我們將以下Linux內(nèi)核變量設(shè)置為在wg0上接受傳入的網(wǎng)絡(luò)數(shù)據(jù)包,然后傳遞到另一個網(wǎng)絡(luò)接口(例如eth0),然后進(jìn)行相應(yīng)的轉(zhuǎn)發(fā):
# sysctl -w net.ipv4.ip_forward=1
對于IPv6,請嘗試以下sysctl命令:
# sysctl -w net.ipv6.conf.all.forwarding=1
步驟7:更新Wireguard配置文件以獲得防火墻和路由支持
我們需要告訴WireGuard命令和腳本片段,這些命令和腳本片段將通過以下兩個指令執(zhí)行:
# Turn on NAT when wg0 comes up #
PostUp = /path/to/add-nat-routing.sh
# Turn of NAT when wg0 goes down #
PostDown = /path/to/remove-nat-routing.sh
放在一起:WireGuard的防火墻規(guī)則
如下更新您的/etc/wireguard/wg0.conf文件:
# vim /etc/wireguard/wg0.conf
附加在[Interface]部分:
PostUp = /etc/wireguard/helper/add-nat-routing.sh
PostDown = /etc/wireguard/helper/remove-nat-routing.sh
如下圖所示:
使用mkdir命令創(chuàng)建一個新目錄:
# mkdir -v /etc/wireguard/helper/
包含使用cat命令顯示的add-nat-routing.sh :
# cat /etc/wireguard/helper/add-nat-routing.sh
和:
# cat /etc/wireguard/helper/remove-nat-routing.sh
確保也使用文本編輯器創(chuàng)建以下文件:
# vim /etc/sysctl.d/10-wireguard.conf
添加以下文本:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
重新加載所有更改并打開NAT路由:
# sysctl -p /etc/sysctl.d/10-wireguard.conf
# chmod -v +x /etc/wireguard/helper/*.sh
# systemctl restart wg-quick@wg0.service
驗證
從客戶端測試您的配置。查看是否可以使用ping命令,dig命令 / host命令和Web瀏覽器訪問Internet 。
總結(jié)
在本文中,我們向您展示了如何在Linux中為WireGuard VPN客戶端啟用IP轉(zhuǎn)發(fā)和NAT規(guī)則,以為內(nèi)部客戶端提供Internet訪問。