这是一个奇怪的。
每当我在酒店网络上时,我倾向于通过我的家庭网络路由我的所有流量。主要是因为我不完全确定我的所有密码都一直通过 SSL。
所以我有以下 OpenVPN 服务器设置:
persist-key
dev tap
keepalive 10 120
port 1194
verb 3
status openvpn-status.log
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DNS 8.8.8.8"
persist-tun
dh dh2048.pem
cert vpnserver.crt
key vpnserver.key
tls-auth ta.key 0
ca ca.crt
proto udp
comp-lzo
cipher AES-128-CBC
ifconfig-pool-persist ipp.txt
client-to-client
这些 iptable 规则的效果非常好:(它正在测试中,所以这里有一些东西并没有真正清理干净。但是到目前为止,我无法触及其中的任何一个来确定哪些应该保留,哪些应该去,因为我我现在正在旅行..)
*nat
:PREROUTING ACCEPT [1152:137606]
:INPUT ACCEPT [835:107096]
:OUTPUT ACCEPT [161:11725]
:POSTROUTING ACCEPT [40:2585]
-A POSTROUTING -s 10.8.0.0/24 -o enp2s0 -j MASQUERADE
# ==
# == ROUTING
# ==
-A POSTROUTING -o enp2s0 -j MASQUERADE
# ==
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:TCP - [0:0]
:UDP - [0:0]
:fw-interfaces - [0:0]
:fw-open - [0:0]
# ==
# == BRIDGE ROUTING
# ==
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j fw-interfaces
-A FORWARD -j fw-open
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
# ==
# == Accepts
# ==
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A UDP -p udp -m udp --dport 53 -j ACCEPT
# ==
# == Forwards
# ==
-A fw-interfaces -i tap0 -j ACCEPT
# == VPN route
-A FORWARD -i enp2s0 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tap0 -o enp2s0 -j ACCEPT
# == VPN
-A INPUT -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 1194 -j ACCEPT
-A OUTPUT -p udp -m state --state RELATED,ESTABLISHED -m udp --sport 1194 -j ACCEPT
# == DNS
-A INPUT -i enp2s0 -p udp -m state --state RELATED,ESTABLISHED -m udp --sport 53 -j ACCEPT
-A OUTPUT -o enp2s0 -p udp -m udp --dport 53 -j ACCEPT
# == WEB-outgoing
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 443 -j ACCEPT
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 80 -j ACCEPT
# == WEB-incomming
-A INPUT -p tcp -m tcp -m state --state NEW,RELATED,ESTABLISHED --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
# ==
# == TAP0
# ==
-A INPUT -i tap0 -p udp -m state --state RELATED,ESTABLISHED -m udp --sport 53 -j ACCEPT
-A OUTPUT -o tap0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i tap0 -p udp --dport 67 -j ACCEPT
#-t nat -A POSTROUTING -s 10.8.0.0/24 -o enp2s0 -j MASQUERADE
-A FORWARD -i tap0 -s 10.8.0.0/24 -o enp2s0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# ==
# == GENERIC
# ==
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -i tap0 -j ACCEPT
-A FORWARD -i tap0 -j ACCEPT
# ==
# == REJECTS
# ==
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
*nat
-A POSTROUTING -s 192.168.1.0/24 -o enp2s0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -o enp2s0 -j MASQUERADE
COMMIT
# Generated by iptables-save v1.4.21 on Thu Jun 5 18:54:09 2014
*mangle
:PREROUTING ACCEPT [76747:82460059]
:INPUT ACCEPT [18221:1445339]
:FORWARD ACCEPT [58437:80998106]
:OUTPUT ACCEPT [17305:8505640]
:POSTROUTING ACCEPT [75742:89503746]
COMMIT
# Completed on Thu Jun 5 18:54:09 2014
# Generated by iptables-save v1.4.21 on Thu Jun 5 18:54:09 2014
*nat
:PREROUTING ACCEPT [1152:137606]
:INPUT ACCEPT [835:107096]
:OUTPUT ACCEPT [161:11725]
:POSTROUTING ACCEPT [40:2585]
-A POSTROUTING -o enp2s0 -j MASQUERADE
COMMIT
# Completed on Thu Jun 5 18:54:09 2014
# Generated by iptables-save v1.4.21 on Thu Jun 5 18:54:09 2014
*filter
:INPUT ACCEPT [18037:1435358]
:FORWARD ACCEPT [58437:80998106]
:OUTPUT ACCEPT [17119:8490056]
-A FORWARD -i enp2s0 -o wlp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlp3s0 -o enp2s0 -j ACCEPT
COMMIT
# Completed on Thu Jun 5 18:54:09 2014
这只是一种工作方式,因为流量肯定会通过 VPN 路由。
但无论出于何种原因,响应流量都会返回 VPN 网络之外,这是不希望的。我假设这些MASQUERADE
线都是错误的?
这是一个示例:
但是当我执行跟踪时,响应会在 VPN 之外返回:
我的路由没问题,我的 DNS 工作正常,所以我再次假设我MASQUERADE
在 iptables 中出错了?也许我试图桥接来自两个接口的流量过于复杂了enp2s0
(我已经删掉了br0
只是192.168.1.0/24
为了缩短规则一点)
编辑:这是我的路线(wlp3s0=wifi):
[torxed@archie ~]$ ip route
0.0.0.0/1 via 10.8.0.1 dev tap0
default via 192.168.1.254 dev wlp3s0
10.8.0.0/24 dev tap0 proto kernel scope link src 10.8.0.2
109.X.X.X via 192.168.1.254 dev wlp3s0
128.0.0.0/1 via 10.8.0.1 dev tap0
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.81
您的 MASQUERADE 规则可能是错误的。
您只能伪装通过 enp2s0 传出的流量,而不是 tap0。这显然会导致数据包保留 wlp3s0 的地址作为其源地址,这可以解释为什么您的回复会从那里进入。
所以,几年后,有点聪明。我发现了根本问题。伪装问题只是部分问题,但我的问题主要是误诊症状。
所以为了伪装,我遵循了这个:https ://unix.stackexchange.com/questions/283801/iptables-forward-traffic-to-vpn-tunnel-if-open
ip.net.ipv4.forwarding=1
这让你在内核中大部分时间都在一起。然后
push "redirect-gateway def1 bypass-dhcp"
确保路由实际上“覆盖”了默认网关。并确保您以提升的权限运行您的 openvpn-client 或允许它更改路由。最后,我的主要问题是我
whats my ip
在 VPN 退出所在的同一台服务器上使用我自己的服务。这使得服务器做了一些内部路由优化,它仍然会告诉我我来自我的“un-vpn:ed”IP。这真是令人困惑。这就是我很长时间以来头疼的问题。把一些长长的 iptables 煮沸,这就是我最终使用的:
取自 Arch Linux wiki 用于Internet 共享。