Iptables

OpenVPN 沒有連接到它背後的服務(iptables?)

  • August 3, 2018

連接到 openvpn 後,我什至無法 ping vpn 地址(172.16.0.1),這是我的 vpn 配置:

##protocol port

port 1194

proto tcp

dev tun



##ip server client

server 172.16.0.0 255.255.0.0



##key

ca /etc/openvpn/ca.crt

cert /etc/openvpn/server.crt

key /etc/openvpn/server.key

dh /etc/openvpn/dh2048.pem



##option

persist-key

persist-tun

keepalive 5 60

reneg-sec 432000



##option authen.

comp-lzo

user nobody

#group nogroup

client-to-client

username-as-common-name

client-cert-not-required

auth-user-pass-verify /etc/openvpn/scripts/login.sh via-env



##push to client

max-clients 50

push "persist-key"

push "persist-tun"

push "redirect-gateway local def1"

push "explicit-exit-notify 1"

#push "route 172.16.1.0 255.255.255.0 172.16.1.1"
#push "route-gateway 172.16.1.1"

#push "route add 10.123.0.0 255.255.0.0 172.16.1.1"



##DNS-Server

push "dhcp-option DNS 10.96.0.10"



##script connect-disconnect

script-security 2

##client-connect /etc/openvpn/scripts/connect.sh

client-disconnect /etc/openvpn/scripts/disconnect.sh



##log-status

##status /etc/openvpn/log/tcp_443.log

##log-append /etc/openvpn/log/openvpn.log

verb 3

連接後,我看到創建了一些奇怪的路線:

default via 172.16.0.5 dev tun0 proto static metric 50 
default via 192.168.10.1 dev enp5s0 proto dhcp metric 100 
172.16.0.0/16 via 172.16.0.5 dev tun0 proto static metric 50 
172.16.0.5 dev tun0 proto kernel scope link src 172.16.0.6 metric 50 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.10.0/24 dev enp5s0 proto kernel scope link src 192.168.10.181 metric 100 
192.168.10.1 dev enp5s0 proto static scope link metric 100 
194.177.28.83 via 192.168.10.1 dev enp5s0 proto static metric 100 

為什麼要添加 172.16.0.5 而不是 172.16.0.1?這樣的地址甚至不存在。

編輯:

就像評論中提到的那樣,是的,它是對等 ip,在我刪除“#push”redirect-gateway local def1”之後,它開始 ping VPN ip,但我仍然無法連接到我在 vpn 後面的服務。我的防火牆規則是:

iptables -A FORWARD -i tun0 -o eth0 -s 172.16.0.0/24 -d 10.0.0.0/8 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/24 -j MASQUERADE

我找出解決方案。我想:

sysctl -w net.ipv4.ip_forward=1

取自節點設置,但我發現 pod 有自己的命名空間,因此需要此設置。但..

設置它有問題,因為它們只能在容器中讀取。所以我嘗試使用 kubernetes 的這個 beta功能來設置它,但它對我不起作用,所以我使用了特權容器設置並從啟動腳本設置了sysctls 。

多虧了它,我可以直接從客戶端連接到我的 k8s 服務 ClusterIP

引用自:https://serverfault.com/questions/924773