Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c5bb70cf52 | |||
| 1918bc3328 | |||
| e25b10d931 | |||
| ad881c1338 | |||
| d66bfc0ee9 | |||
|
|
e498b1adc5 | ||
|
|
6cd7c96230 | ||
|
|
3c32236374 | ||
|
|
0490f5124b | ||
|
|
6d4c94e49e |
@@ -17,7 +17,10 @@ switch:
|
|||||||
192.168.6.100:8088:
|
192.168.6.100:8088:
|
||||||
group: ["10.10.10.86", "10.10.10.87"] # 海口
|
group: ["10.10.10.86", "10.10.10.87"] # 海口
|
||||||
city: "4601"
|
city: "4601"
|
||||||
|
192.168.6.100:8090:
|
||||||
|
group: ["10.10.10.90", "10.10.10.91"] # 济南
|
||||||
|
city: "3701"
|
||||||
192.168.6.100:8091:
|
192.168.6.100:8091:
|
||||||
group: ["10.10.10.92", "10.10.10.93"] # 三亚
|
group: ["10.10.10.92", "10.10.10.93"] # 三亚
|
||||||
city: "4602"
|
city: "4602"
|
||||||
restart: 50
|
restart: 65
|
||||||
|
|||||||
4
dip.go
4
dip.go
@@ -74,12 +74,10 @@ func (group *DIPGroup) Choose(addr string) {
|
|||||||
SetAddrForward(group.IPTableNum, addr, ip)
|
SetAddrForward(group.IPTableNum, addr, ip)
|
||||||
} else {
|
} else {
|
||||||
restartAddr := "http://" + group.Current.Host + ":8800/pppoe/restart"
|
restartAddr := "http://" + group.Current.Host + ":8800/pppoe/restart"
|
||||||
if resp, err := requests.NewSession().Get(restartAddr).Execute(); err != nil {
|
if _, err := requests.NewSession().Get(restartAddr).Execute(); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
group.Current.ActiveTime += 12
|
group.Current.ActiveTime += 12
|
||||||
defer resp.GResponse.Body.Close()
|
|
||||||
} else {
|
} else {
|
||||||
defer resp.GResponse.Body.Close()
|
|
||||||
group.Current = dhost
|
group.Current = dhost
|
||||||
group.Current.ActiveTime = now
|
group.Current.ActiveTime = now
|
||||||
// log.Println("new set addr:", group.Current.Host, "restartAddr:", restartAddr, "resp", resp.Content())
|
// log.Println("new set addr:", group.Current.Host, "restartAddr:", restartAddr, "resp", resp.Content())
|
||||||
|
|||||||
40
readme.md
Normal file
40
readme.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
说明:
|
||||||
|
====
|
||||||
|
####
|
||||||
|
根据actives.yaml配置, 添加adsl拨号的主机. eg:
|
||||||
|
```yaml
|
||||||
|
switch:
|
||||||
|
192.168.6.100:8080:
|
||||||
|
group: ["10.10.10.70", "10.10.10.71"] # 苏州
|
||||||
|
city: "3205"
|
||||||
|
192.168.6.100:8082:
|
||||||
|
group: ["10.10.10.74", "10.10.10.75"] # 天津
|
||||||
|
city: "12"
|
||||||
|
192.168.6.100:8083:
|
||||||
|
group: ["10.10.10.76", "10.10.10.77"] # 滨州
|
||||||
|
city: "3716"
|
||||||
|
restart: 50
|
||||||
|
```
|
||||||
|
192.168.6.100:8080 为代理的ip地址
|
||||||
|
group: 内为adsl主机的vpn节点ip
|
||||||
|
city: 为城市代码
|
||||||
|
restart: 为切换时间
|
||||||
|
####
|
||||||
|
----
|
||||||
|
#####
|
||||||
|
http:/{ipcenter_host}/ippool/switch/actives 可以获取当前可用ip地址的json信息. eg:
|
||||||
|
```json
|
||||||
|
{"192.168.6.100:8080":{"city":"3205","group":["10.10.10.70","10.10.10.71"]},"192.168.6.100:8082":{"city":"12","group":["10.10.10.74","10.10.10.75"]},"192.168.6.100:8083":{"city":"3716","group":["10.10.10.76","10.10.10.77"]},"192.168.6.100:8085":{"city":"5328","group":["10.10.10.80","10.10.10.81"]},"192.168.6.100:8087":{"city":"1506","group":["10.10.10.84","10.10.10.85"]},"192.168.6.100:8088":{"city":"4601","group":["10.10.10.86","10.10.10.87"]},"192.168.6.100:8091":{"city":"4602","group":["10.10.10.93","10.10.10.92"]}}
|
||||||
|
```
|
||||||
|
#####
|
||||||
|
|
||||||
|
----
|
||||||
|
启动例子:
|
||||||
|
====
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone http:...
|
||||||
|
go build
|
||||||
|
sh start.sh
|
||||||
|
```
|
||||||
|
|
||||||
19
switch.go
19
switch.go
@@ -26,7 +26,7 @@ type Switch struct {
|
|||||||
func SetAddrForward(num, addr, ip string) {
|
func SetAddrForward(num, addr, ip string) {
|
||||||
port := strings.Split(addr, ":")[1]
|
port := strings.Split(addr, ":")[1]
|
||||||
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -R IPSWITCH "+num+" -p tcp --dport "+port+" -j DNAT --to "+ip+":8885")
|
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -R IPSWITCH "+num+" -p tcp --dport "+port+" -j DNAT --to "+ip+":8885")
|
||||||
err := cmd.Run()
|
_, err := cmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -55,9 +55,15 @@ func (swi *Switch) Run(addr string, ipregion string) {
|
|||||||
|
|
||||||
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -N IPSWITCH")
|
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -N IPSWITCH")
|
||||||
cmd.Run()
|
cmd.Run()
|
||||||
|
if err := cmd.Process.Release(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
cmd = exec.Command("/bin/sh", "-c", "sudo iptables -t nat -F IPSWITCH")
|
cmd = exec.Command("/bin/sh", "-c", "sudo iptables -t nat -F IPSWITCH")
|
||||||
cmd.Run()
|
cmd.Run()
|
||||||
|
if err := cmd.Process.Release(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
for range swi.Worker.ForLoop {
|
for range swi.Worker.ForLoop {
|
||||||
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -A IPSWITCH -p icmp -s 1.1.1.1 -j DNAT --to 1.1.1.1:8885")
|
cmd := exec.Command("/bin/sh", "-c", "sudo iptables -t nat -A IPSWITCH -p icmp -s 1.1.1.1 -j DNAT --to 1.1.1.1:8885")
|
||||||
@@ -65,10 +71,15 @@ func (swi *Switch) Run(addr string, ipregion string) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := cmd.Process.Release(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
http.ListenAndServe(addr, nil)
|
server := &http.Server{Addr: addr, Handler: nil}
|
||||||
|
server.SetKeepAlivesEnabled(false)
|
||||||
|
server.ListenAndServe()
|
||||||
}
|
}
|
||||||
|
|
||||||
// timeToSwitch 计算是否到切换时间
|
// timeToSwitch 计算是否到切换时间
|
||||||
@@ -93,7 +104,7 @@ func (swi *Switch) checkInReady(ip string, now int64) {
|
|||||||
dipg.Group[ip].ActiveTime = now
|
dipg.Group[ip].ActiveTime = now
|
||||||
|
|
||||||
if dh, ok := dipg.Waitor[ip]; ok {
|
if dh, ok := dipg.Waitor[ip]; ok {
|
||||||
if dh.OverTime(now, 30) > 0 {
|
if dh.OverTime(now, 20) > 0 {
|
||||||
delete(dipg.Waitor, ip)
|
delete(dipg.Waitor, ip)
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user