我有一台帶有額外的、僅限本地的乙太網路介面和私有子網路的電腦。建立 StrongSwan VPN 後,我無法存取該子網路。
這是本地“左”配置(由演算法):
conn ikev2-<rightip>
fragmentation=yes
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=no
dpddelay=35s
ike=aes128gcm16-prfsha512-ecp256!
esp=aes128gcm16-ecp256!
right=<rightip>
rightid=<rightip>
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftauth=pubkey
leftcert=daves.crt
leftfirewall=yes
left=%defaultroute
auto=add
相關子網路是 10.0.0.0/24。 %defaultroute 解析為 192.168.0.0/24 中的位址。
「left」和「leftsubnet」看起來不是正確的選擇,但我認為沒有更好的選擇。我嘗試將 leftsubnet 設定為 10.0.0.0/24 和 !10.0.0.0/24。
如何從 StronSwan VPN 連線中排除本機子網路?
如何檢查連接的路由配置?
答案1
您可以設定一個直通政策。
更新:正如 @ecdsa 所指出的,在 Strongswan >= 5.5.2 的情況下,有一個更簡單的方法,看最後你的版本能不能用。
帶有一些隨機 IP 的範例。在進行任何更改和隧道之前:
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0
建立隧道後,問題:
# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0
將此配置新增至/etc/ipsec.conf
:
conn ignorelan
left=127.0.0.1 #prevents usage in peers selection algorithm
leftsubnet=10.0.0.0/24
rightsubnet=10.0.0.0/24
authby=never
type=passthrough
auto=route
並重新加載它:
# ipsec reload
應立即激活它。如果沒有(這次)你可以這樣做:
# ipsec route ignorelan
'ignorelan' shunt PASS policy installed
無論如何,它應該在以後重新啟動時使用。您現在擁有(除了任何隧道之外):
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
[...]
現在,無論隧道是否建立,您都會返回正確的路線(由 Strongswan 處理,因此在表 220 中,而不僅僅是表 main(不再)):
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0
cache
對於 0.0.0.0/0 的隧道,將出現與表 220 類似的結果:
# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
192.168.0.0/24 dev eth0 proto static src 192.168.0.44
如果您沒有在直通設定中放置與實際情況相符的路由(例如:錯誤的網路遮罩),則「分流」會出現錯誤的結果(如預期的來源IP,但會通過錯誤的網路卡),所以要小心。
更新: 這旁路 LAN 插件更易於使用,尤其是在動態環境中。
不要新增條目,而是conn
啟動它(例如在Debian buster(不穩定)上,編輯/etc/strongswan.d/charon/bypass-lan.conf 並設定load=yes (即:charon.plugins.bypass-lan .load =是))。預設情況下,每個介面都會被分流,這意味著將建立隧道,但預設不會使用。所以只需設定其中一個interfaces_ignore
或interfaces_use
相應即可。您應該interfaces_ignore
為您的介面設定不想要繞過隧道,或設定interfaces_use
為您設定的接口想繞過隧道。例如:
interface_use = lxcbr0
之後會在這個例子中得到ipsec start
,就像之前的方法一樣:
# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
(但在使用 IPv6 時也會考慮與此介面相關的 IPv6 路由)。
另一種(hackish)方法是繞過strongswan的表220:而不是任何strongswan設置,可以透過以下方式實現相同的效果(對於這些問題和範例):
ip rule add priority 219 to 10.0.0.0/24 lookup main
它將使用目標網路的預設(主)路由表,而不是使用 Strongswan 的表 220 繼續到下一個條目。