示例:將默認(rèn)網(wǎng)關(guān)重定向到 VPN 上的主機(jī)
可以讓一個(gè)節(jié)點(diǎn)將其所有網(wǎng)絡(luò)流量轉(zhuǎn)發(fā)到 VPN 上的主機(jī),從而有效地使用此 VPN
主機(jī)作為默認(rèn)網(wǎng)關(guān)。在 OpenVPN 中,有一個(gè) --redirect-gateway為客戶端執(zhí)行此操作的選項(xiàng)。使用
tinc,沒有這樣的選項(xiàng),但可以使用 host-up 和 host-down 腳本復(fù)制此行為。首先解釋重定向默認(rèn)網(wǎng)關(guān)背后的理論,然后是示例腳本。
示例:將默認(rèn)網(wǎng)關(guān)重定向到 VPN 上的主機(jī)
理論
腳本
進(jìn)一步配置
路由器與交換機(jī)模式
理論
通常,路由表中有兩個(gè)條目。一個(gè)是本地網(wǎng)絡(luò)的路由,它告訴內(nèi)核哪些
IP 地址可直接訪問。第二個(gè)是“默認(rèn)網(wǎng)關(guān)”,它告訴內(nèi)核,為了到達(dá)互聯(lián)網(wǎng)的其余部分,流量應(yīng)發(fā)送到本地網(wǎng)絡(luò)的網(wǎng)關(guān)。通常網(wǎng)關(guān)是路由器或防火墻設(shè)備,其
IPv4 地址通常以 結(jié)尾.1。Linux 上的示例輸出route -n:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
這里,LAN
的 IPv4 地址范圍為 192.168.1.0/24,網(wǎng)關(guān)為 192.168.1.1。假設(shè)我們有一個(gè)地址范圍為 172.16.0.0/16 的
VPN,其中存在一個(gè)地址為 172.16.1.1 的服務(wù)器。如果我們有一個(gè) VPN 連接,并且客戶端想要用指向 172.16.1.1
的默認(rèn)路由替換標(biāo)準(zhǔn)默認(rèn)路由,那么就會出現(xiàn)問題:內(nèi)核不再知道如何將封裝的 VPN 數(shù)據(jù)包發(fā)送到服務(wù)器。因此,我們需要為 VPN 服務(wù)器的真實(shí) IP
地址的流量添加例外。假設(shè)其真實(shí)地址為 192.0.32.10,則路由表應(yīng)變?yōu)椋?br/>
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 vpn
192.0.32.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 172.16.1.1 0.0.0.0 UG 0 0 0 vpn
這將確保本地 LAN 可達(dá)、VPN 服務(wù)器的真實(shí) IP 地址可通過原始網(wǎng)關(guān)可達(dá)、VPN 服務(wù)器的 VPN IP 地址可通過 VPN 接口可達(dá),并且所有其他流量都通過 VPN 上的服務(wù)器進(jìn)行。
最好不要刪除原始默認(rèn)網(wǎng)關(guān)路由,因?yàn)橛腥丝赡軙K止該tincd進(jìn)程,這樣它就沒有機(jī)會恢復(fù)原始路由。相反,我們使用一個(gè)技巧,即添加兩個(gè) /1 路由而不是一個(gè) /0 路由:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 vpn
192.0.32.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
128.0.0.0 172.16.1.1 128.0.0.0 UG 0 0 0 vpn
0.0.0.0 172.16.1.1 128.0.0.0 UG 0 0 0 vpn
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
由于兩個(gè) /1 覆蓋所有可能的地址,因此當(dāng)存在兩個(gè) /1 路由時(shí),永遠(yuǎn)不會使用真正的默認(rèn)路由。
腳本
假設(shè)我們有兩個(gè)節(jié)點(diǎn),分別稱為client和 server,網(wǎng)絡(luò)名稱為myvpn。此外,我們假設(shè)服務(wù)器已正確配置為在 VPN 和 Internet 之間為將其用作默認(rèn)網(wǎng)關(guān)的客戶端執(zhí)行路由或偽裝。然后,客戶端上只需要兩個(gè)腳本。以下腳本是 Linux 專用的:
/etc/tinc/myvpn/hosts/server-up:
#!/bin/sh
VPN_GATEWAY=172.16.1.1
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route add $VPN_GATEWAY dev $INTERFACE
ip route add 0.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
ip route add 128.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
/etc/tinc/myvpn/hosts/server-down:
#!/bin/sh
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
ip route del $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route del $VPN_GATEWAY dev $INTERFACE
ip route del 0.0.0.0/1 dev $INTERFACE
ip route del 128.0.0.0/1 dev $INTERFACE
這些腳本使用 iproute2 命令,因?yàn)樗鼈兏子谑褂?。VPN_GATEWAY必須手動填寫變量。ORIGINAL_GATEWAY變量從原始默認(rèn)路由復(fù)制相關(guān)信息,以創(chuàng)建到 VPN 服務(wù)器的例外路由。
進(jìn)一步配置
還必須確保 tinc 守護(hù)進(jìn)程知道將所有數(shù)據(jù)包發(fā)送到哪個(gè)節(jié)點(diǎn)。確保以下行位于 /etc/tinc/myvpn/hosts/server:
Subnet = 0.0.0.0/0
確保服務(wù)器上設(shè)置了偽裝或其他形式的路由。不要忘記允許轉(zhuǎn)發(fā)數(shù)據(jù)包;檢查防火墻設(shè)置,并確保內(nèi)核中啟用了轉(zhuǎn)發(fā):
echo 1 >/proc/sys/net/ipv4/ip_forward
您還可以設(shè)置端口轉(zhuǎn)發(fā)或代理,以便能夠從 Internet 的其余部分連接到客戶端上運(yùn)行的服務(wù)。
路由器與交換機(jī)模式
上述示例適用于路由器和交換機(jī)模式。然而,在路由器模式下,實(shí)際上沒有網(wǎng)關(guān)路由。在該模式下,tinc-up 腳本中的以下四行:
VPN_GATEWAY=...
ip route add $VPN_GATEWAY dev $INTERFACE
ip route add 0.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
ip route add 128.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
可以用下面兩行替換,沒有任何問題:
ip route add 0.0.0.0/1 dev $INTERFACE
ip route add 128.0.0.0/1 dev $INTERFACE
上一篇:代理 ARP 作為橋接的替代方案
下一篇:簡單橋接與 DHCP 客戶端
24小時(shí)免費(fèi)咨詢
請輸入您的聯(lián)系電話,座機(jī)請加區(qū)號