When you compile source1.c into source1.o, it contains a definition of func1.  Similarly, when you compile source2.c into source2.o, it also contains a definition of func1.  So when you link source1.o and source2.o, you get a multiple definition error.
The reason the include guards don't prevent this is because source1.c and source2.c are each compiled separately.  Include guards only help within a single compilation unit.
If this were not an inline function, you'd put a declaration in the header file:
int func1();
Then put the definition in exactly one source file.
However, you're defining the function as inline.  So you need to also declare it as static so that each compilation unit gets its own copy of the function.
EDIT:
The multiple definition error is happening because you're compiling in C89 mode by default, and inline isn't part of that version of the standard.  As such, it seems that gcc is basically ignoring that keyword.
If you compile in C99 or C11 mode using -std=c99 or =std=c11 with this code, you'll actually get an "undefined reference" error.  Section 6.7.4p7 of the C standard states the following:
Any function with internal linkage can be an inline function.  For a function with external linkage,  the  following  restrictions  apply:  If  a  function  is  declared  with  an inline function  specifier, then  it  shall  also  be  defined  in  the  same  translation  unit.  If  all  of  the file  scope  declarations  for  a  function  in  a  translation  unit  include  the inline function specifier  without extern,  then  the  definition  in  that  translation  unit  is  an inline definition.  An inline  definition  does  not  provide  an  external  definition  for  the  function,and does not forbid an external definition in another translation unit.  An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit.  It is unspecified whether a call to the function uses the inline definition or the external definition
What this means is that a function with only inline doesn't actually provide a definition of a function that can be called.  In your case, you want to add the static storage class specifier to force a local definition in each file.
Interestingly, if you compile this code as is with -O1 and -std=c99, gcc will physically inline the function and it will compile and run cleanly.