Skip to main content

networking - How to make Apache output packets through a certain network interface when connected to VPN?

itemprop="text">

I have an apache server that works
perfect until I connect to VPN and then all connections to server time
out.



Now to my understanding the issue is
tun0 becomes the default output interface hence apache gets
confused as how to send packets out, so I tried to fix it using control groups by
marking packets going out from apache and redirecting them through
eth0 as described in this href="https://superuser.com/a/1048913/320129">SU answer, but it doesn't
work anymore after I upgraded my Ubuntu OS to version 16.04. This is my network
diagram:




href="https://i.stack.imgur.com/7BH2S.jpg" rel="nofollow noreferrer"> src="https://i.stack.imgur.com/7BH2S.jpg" alt="enter image description
here">



And here's my network
details:



me@mypc:~$ ip route
list
0.0.0.0/1 via 10.132.1.5 dev tun0
default via 192.168.0.1 dev
eth0 proto static metric 100
10.132.1.1 via 10.132.1.5 dev tun0

10.132.1.5 dev tun0 proto kernel scope link src 10.132.1.6

123.4.5.6 via 192.168.0.1 dev eth0

234.5.6.7 via
192.168.0.1 dev eth0
128.0.0.0/1 via 10.132.1.5 dev tun0

169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev
eth0 proto kernel scope link src 192.168.0.6 metric 100

me@mypc:~$
ifconfig
eth0 Link encap:Ethernet HWaddr 00:cc:a9:b3:c9:41
inet
addr:192.168.0.6 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING
MULTICAST MTU:1500 Metric:1
RX packets:864897 errors:0 dropped:0 overruns:0
frame:0

TX packets:467142 errors:0 dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:1000
RX bytes:1088053099 (1.0
GB) TX bytes:220201868 (220.2 MB)
Interrupt:17

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.132.1.6 P-t-P:10.132.1.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING
NOARP MULTICAST MTU:1500 Metric:1
RX packets:46622 errors:0 dropped:0
overruns:0 frame:0
TX packets:14950 errors:0 dropped:0 overruns:0
carrier:0
collisions:0 txqueuelen:100
RX bytes:60587170 (60.5 MB)
TX bytes:1396546 (1.3
MB)


I've done further
testing and discovered that if I add this routing
rule:




sudo route add
-host 123.4.5.6 gw
192.168.0.1


I become
able to connect to the server from devices connected to my router using the router ip
123.4.5.6 but not from any other ip
address.



And after setting up the control groups
on apache and trying the following
command:



sudo cgexec -g
net_cls:novpn wget
http://www.whatsmyip.org/



and
checking the ip in the downloaded webpage it would be my router ip
123.4.5.6 and not my vpn ip
10.132.1.6.



So I guess
the control groups solution works somehow but not with apache and the incoming packets
are being received successfully by apache but nothing is going
out.



How can I configure apache to use
eth0 to output packets instead of
tun0?


class="post-text" itemprop="text">
class="normal">Answer



So you
need both default gateways; then the way to do this then is with route
rules:



1) Add a secondary IP to eth0 - ie
192.168.1.7 and restart apache (sounds like your config is listen
0.0.0.0:80
so you'll just need to restart apache to get it to listen on the
new IP.




2) Change the Nat rules on
your router to foward traffic to this IP:



3)
Create a new default route in a secondary route table lets name the table
'apache':



echo "1 apache" >>
/etc/iproute2/rt_tables


4)
Add a default route to this table via your local
router.



ip route add default via
192.168.0.1 dev eth0 table
apache



5)
Finally you need a rule to define which traffic should use the apache route
table.



ip rule add from
192.168.0.7 table
apache


192.168.0.7 is
a secondary IP and Apache is the only process using it this rule should only match the
traffic leaving apache in response to web requests. This will ensure that only that
specific traffic will be use the new route table and it won't mess with your VPN traffic
or its current routing behaviour.



please note
that the ip commands won't persist after reboot. To make them
persistent add them to your interface up scripts to make run every time your laptop
reboots.




P.S Leaving my old answer
and did this as a new answer as this is very different solution.



Comments

Popular posts from this blog

linux - iDRAC6 Virtual Media native library cannot be loaded

When attempting to mount Virtual Media on a iDRAC6 IP KVM session I get the following error: I'm using Ubuntu 9.04 and: $ javaws -version Java(TM) Web Start 1.6.0_16 $ uname -a Linux aud22419-linux 2.6.28-15-generic #51-Ubuntu SMP Mon Aug 31 13:39:06 UTC 2009 x86_64 GNU/Linux $ firefox -version Mozilla Firefox 3.0.14, Copyright (c) 1998 - 2009 mozilla.org On Windows + IE it (unsurprisingly) works. I've just gotten off the phone with the Dell tech support and I was told it is known to work on Linux + Firefox, albeit Ubuntu is not supported (by Dell, that is). Has anyone out there managed to mount virtual media in the same scenario?

hp proliant - Smart Array P822 with HBA Mode?

We get an HP DL360 G8 with an Smart Array P822 controller. On that controller will come a HP StorageWorks D2700 . Does anybody know, that it is possible to run the Smart Array P822 in HBA mode? I found only information about the P410i, who can run HBA. If this is not supported, what you think about the LSI 9207-8e controller? Will this fit good in that setup? The Hardware we get is used but all original from HP. The StorageWorks has 25 x 900 GB SAS 10K disks. Because the disks are not new I would like to use only 22 for raid6, and the rest for spare (I need to see if the disk count is optimal or not for zfs). It would be nice if I'm not stick to SAS in future. As OS I would like to install debian stretch with zfs 0.71 as file system and software raid. I have see that hp has an page for debian to. I would like to use hba mode because it is recommend, that zfs know at most as possible about the disk, and I'm independent from the raid controller. For us zfs have many benefits,

apache 2.2 - Server Potentially Compromised -- c99madshell

So, low and behold, a legacy site we've been hosting for a client had a version of FCKEditor that allowed someone to upload the dreaded c99madshell exploit onto our web host. I'm not a big security buff -- frankly I'm just a dev currently responsible for S/A duties due to a loss of personnel. Accordingly, I'd love any help you server-faulters could provide in assessing the damage from the exploit. To give you a bit of information: The file was uploaded into a directory within the webroot, "/_img/fck_uploads/File/". The Apache user and group are restricted such that they can't log in and don't have permissions outside of the directory from which we serve sites. All the files had 770 permissions (user rwx, group rwx, other none) -- something I wanted to fix but was told to hold off on as it wasn't "high priority" (hopefully this changes that). So it seems the hackers could've easily executed the script. Now I wasn't able