基础太差。。。很多东西理解起来也困难。
原先就是看了这篇文档以为很简单,结果还是有很多特定环境的限制,包括 ipv4+ipv6 环境,服务器不支持 ip6tables -t nat ,需要禁用 AAAA 查询,还包括 iproute2 的一些无底坑,这些坑在官方文档中都没有任何提及。
OpenWrt VPN 按域名路由
https://blog.sorz.org/p/openwrt-outwall/ redsocks2 原先在 openwrt 下面配置成功过,可是 vps 。。。反正在透明代理这块基本上网上能找到的实例,命令打一遍最终没效果,也不知道坑在哪里。。。
所以最终用 softether vpn ,这东东无比的强大,它本身就有虚拟网卡实现,最终基本甚至没用到任何的虚拟 L3 路由功能。目前实现的效果就是 就近访问日本 vps , vps 中一部分 youtube 流量中转的是美国 vps 上的流量,所以跟你想要实现的效果差不多。自己多试几遍吧,回头看看还是挺简单的,但是可扩展效果比透明代理好多了。实例虽然是用 dnsmasq ipset 特定域名,其实可以实现建立 ipset -N outwall4 nethash ,然后直接写路由表。
vpn 采用 softether vpn server
服务器端
创建虚拟 HUB server/管理虚拟 HUB/并添加用于客户端连接用的 管理用户
本地网桥设置 /将虚拟 HUB server 选择创建的类型 新 tap 设备的桥接,并输入设备名称 soft1
ifconfig tap_soft1 192.168.60.100
ifconfig tap_soft1 mtu 1392
添加 ipv6 地址,只是为了以后不需要改动服务器配置所以固定一个地址
ip address add fe80::4ac:20ff:fe9c:1000/128 dev tap_soft1
#ip address del fe80::4ac:20ff:fe9c:1000/128 dev tap_soft1
客户端
创建虚拟 HUB client/管理虚拟 HUB/管理级联连接 创建到服务器端的连接
本地网桥设置 /将虚拟 HUB client 选择创建的类型 新 tap 设备的桥接,并输入设备名称 soft1
ifconfig tap_soft1 192.168.60.200
ifconfig tap_soft1 mtu 1392
#ip address add fe80::4ac:20ff:fe9c:2000/128 dev tap_soft1
#ip address del fe80::4ac:20ff:fe9c:2000/128 dev tap_soft1
如果能互相 ping 通 vpn 连接已经没有任何问题。
ping 192.168.60.100
ping6 -I tap_soft1 fe80::4ac:20ff:fe9c:1000
* 2015 年 12 月 14 日星期一
- [bash] iptables iproute2 and multiple routes
http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html- 今天按这篇文档一路设置下来第一次用 fwmark 成功设置路由,由于服务器并没有 ip6table_nat 模块,所以仅能使用 iptable_nat
- 另外似乎设置的 set-mark 3 和原先的 QOS 标记有冲突,只有在 iptables -t mangle -F 清空原先的标记时才有效果,应该是能解决的
- 这次设置最成功的地方在于不会有 vpn 客户端拔号时出现因为接口的问题而无法访问网络
- 另外第一次注意到 iptabes 的全局 ACCEPT 并不是万能的,像此例必须指定特定接口的 MASQUERADE 才可以成功。
/etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done
iptables -I OUTPUT -o eth0 -p udp --dport 53 -m string --hex-string "|07|youtube|03|com|00001c|" --algo bm -j DROP
dnsmasq.conf
ipset=/
youtube.com/outwall4,outwall6iptables-restore /da/fw
ipset destroy outwall6
ipset -N outwall6 iphash family inet6
ipset destroy outwall4
ipset -N outwall4 iphash
##echo "200 outwall" >> /etc/iproute2/rt_tables
ipset -L outwall4 >/tmp/outwall4.tmp
for i in `sed -n "7,$ p" /tmp/outwall4.tmp`;do echo $i;ipset -D outwall4 $i;done
kill -HUP $(pidof dnsmasq)
nslookup
www.youtube.comnslookup
m.youtube.comnslookup
youtube.com#ipset 需要 dnsmasq 通过本地像 192.168.40.253:53 进行查询,直接外部 dns 服务器会没结果
ipset -L outwall4
iptables -t mangle -D PREROUTING -m mark --mark 0x0/0xff00 -m set --match-set outwall4 dst -j MARK --set-xmark 0xfe00/0xff00
iptables -t mangle -D OUTPUT -m mark --mark 0x0/0xff00 -m set --match-set outwall4 dst -j MARK --set-xmark 0xfe00/0xff00
iptables -t mangle -I PREROUTING 2 -m mark --mark 0x0/0xff00 -m set --match-set outwall4 dst -j MARK --set-xmark 0xfe00/0xff00
iptables -t mangle -I OUTPUT -m mark --mark 0x0/0xff00 -m set --match-set outwall4 dst -j MARK --set-xmark 0xfe00/0xff00
##ip route add 192.168.40.0/24 via 192.168.30.254 dev tap_soft
ip route flush table outwall
ip route add default via 192.168.30.254 dev tap_soft table outwall
#ip route add 192.168.40.0/24 via 192.168.30.254 dev tap_soft table outwall
ip rule del table outwall
ip rule add fwmark 0xfe00/0xff00 table outwall prio 1
#ip rule add from 192.168.50.0/24 table outwall prio 1
ip route flush cache
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o vpns+ -j MASQUERADE
iptables -t nat -A POSTROUTING -o tap_soft -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- 调整了原先的 qos 标记为 0x00/0xff ,路由标记为 0xfe00/0xff00,如果标记为 0xff00/0xff00 则变为 or 标记。注意使用 iptables -I 将规则放在最前面。有关 iptables xmark 的描述看不懂,有人说可以把不同的 mask 看成是 subnet 。
- qos-scripts currently uses the last 8 bits to mark traffic e.g.-j MARK --set-xmark 0x44/0xff
whereas multi-wan uses the next 8 bits (0xff00) to mask its marks: