我在笔记本电脑上运行 openvpn 客户端,并在远程服务器(ec2 或 aliyun)上运行 openvpn 服务器。我希望所有流量都通过 openvpn 服务器。当笔记本电脑和 openvpn 服务器之间建立连接时,我无法访问任何互联网,服务器端显示以下消息:
client/131.202.160.31:59288 MULTI: bad source address from client [131.202.160.31], packet dropped
131.202.160.31 是我的笔记本电脑地址。服务器上的路由信息是:
root@iZbp15fejv9adv7o3izfm1Z:~# ip route show
default via 172.16.63.253 dev eth0
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
172.16.48.0/20 dev eth0 proto kernel scope link src 172.16.62.150
root@iZbp15fejv9adv7o3izfm1Z:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3e:0e:1c:43
inet addr:172.16.62.150 Bcast:172.16.63.255 Mask:255.255.240.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
一些相关页面通过 openvpn 重定向所有流量, 和AskUbuntu 坏源地址, 和说明。
解释得很清楚,但我仍然很困惑。1)错误表明 openvpn 服务器不知道如何转发包,这是因为 VPN 客户端后面有一个子网。在我的例子中,只有一台运行 openvpn 客户端的笔记本电脑客户端。
2) 我不熟悉网络。有人可以提供 server.conf 中 ccd 配置的示例吗(例如,masks、iroute)?看起来这个配置将包括我的笔记本电脑的地址。就我而言,我的笔记本电脑地址是动态的,并且会经常移动。
server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 5
;mute 20
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1" #The result is the same even I use the openDNS
和
root@iZbp15fejv9adv7o3izfm1Z:/etc/openvpn# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.8.0.0/24 anywhere
我在 /etc/rc.local 末尾添加了以下指令
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service dnsmasq restart
exit 0